MySQL一起获得子行的父母

时间:2015-10-28 19:49:41

标签: mysql

我已经搜索过这样的问题,虽然很多是类似的,但是没有回答我的问题和查询不起作用。

假设我们有下表

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是根类别,然后是孩子跟随,然后是另一个父母与它的孩子。等

2 个答案:

答案 0 :(得分:2)

这适用于1级树,即仅包含父母及其子女的树:

SELECT *
FROM mytable
ORDER BY CONCAT(IF(parent_id=0, '', parent_id), id)

Demo here

答案 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);