我已经搜索过这样的问题,虽然很多是类似的,但是没有回答我的问题和查询不起作用。
假设我们有下表
id category_name parent_id
------------------------------------
1 test 0
2 test1 0
3 new_cat 1
4 new_catx 2
5 cat5 1
我想要一个sql查询,其输出将是这样的
id category_name parent_id
------------------------------------
1 test 0
3 new_cat 1
5 cat5 1
2 test1 0
4 new_catx 2
在排序中,输出查询基于parent_id排序。 parent_id = 0
是根类别,然后是孩子跟随,然后是另一个父母与它的孩子。等
答案 0 :(得分:2)
这适用于1级树,即仅包含父母及其子女的树:
SELECT *
FROM mytable
ORDER BY CONCAT(IF(parent_id=0, '', parent_id), id)
答案 1 :(得分:0)
理想情况下,您应该使用映射表,以使您的解决方案具有可扩展性。将原始表结构更改为
id category_name
---------------------
1 test
2 test1
3 new_cat
4 new_catx
5 cat5
...并有一个父映射表,如下所示:
id parent_id
---------------------
3 1
4 2
5 1
然后你只需将Giorgos Betsos的优秀查询修改为:
select t.id, t.category_name, p.parent_id
from testtable t left outer join parents p
on t.id = p.id
ORDER BY CONCAT(IF(p.parent_id is null, '', p.parent_id), t.id);