所以我想解决以下问题:
SELECT * FROM `#__gdwproddise_category`
ORDER BY IF(`parent_id`, `parent_id`, `ordering`),
`parent_id`, `ordering` asc
所以重要的MYSQL字段是:
`multicat_id` = primary key
`parent_id`
`ordering`
父类别parent_id
= 0,其余为=父母的multicat_id
每个唯一的parent_id
(包括= 0,因此父母)都会在ordering
字段中设置唯一排序。
因此,在排序字段中,您会找到多个值为1,2,3等的行(每个值在每个parent_id
内都是唯一的
like parent_id=0 will only have 1 row with ordering set to 1.
and parent_id=1 will only have 1 row with ordering set to 1.
etc.
我希望通过以下方式输出它们:
parent (ordering=1)
-child (ordering=1)
-child (ordering=2)
parent (ordering=2)
-child (ordering=1)
etc.
以下查询似乎几乎可行。但是父母不是按ordering
字段排序的。他们似乎是按主键排序的。
SELECT * FROM `#__gdwproddise_category`
ORDER BY IF(`parent_id`, `parent_id`, `multicat_id`),
`parent_id`, `ordering` asc
我发布的第一个查询是我的演绎尝试修复此问题,但这不起作用......第一个查询效果更好。至少父母和孩子被分组到第一个。这第二个人将孩子的父母分组。孩子们似乎坚持不懈。
我的查询基于以下线程的答案中给出的示例: SQL nested order by?
我发现了这篇文章:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/
当我使用aLmost的查询完全符合我的要求时,使用该文章中的“ltg rtg”解决方案似乎很复杂...那篇文章似乎支持无限子类...我的系统只需要1级子类别。
答案 0 :(得分:3)
因为您需要知道放置块的父级的顺序 在结果中的正确位置的子行,你可能会有 使用自我加入。
以下查询似乎给出了您想要的顺序:
SELECT C.* FROM categories AS C
LEFT JOIN categories AS P
ON P.multicat_id = C.parent_id
ORDER BY IF(P.multicat_ID, P.ordering, C.ordering),
P.ordering, C.ordering;
进行测试