从自引用mysql表中检索父子层次结构

时间:2013-12-26 10:38:46

标签: php mysql pdo

我有一个像这样的mysql表(删除了其他列,与问题无关):

id          parent_id
----------- -----------
1           0          
2           0            
3           0          
4           3          
5           2
6           1
7           1          

“父级”是具有parent_id = 0的行。

我想知道是否有办法制定查询,以便MySQL在父母之后输出每个孩子的行?

预期的结果是

id          parent_id
----------- -----------
1           0          
6           1            
7           1          
2           0          
5           2          
3           0          
4           3          

感谢您的时间。

1 个答案:

答案 0 :(得分:4)

MySQL不支持递归查询,因此如果孩子可以有孩子,则无法制定此类查询。否则,此查询应按您需要的顺序返回行:

SELECT * FROM tablename
ORDER BY
  CASE WHEN parent_id=0 THEN id ELSE parent_id END,
  id

请参阅小提琴here。诀窍是按id排序,如果它是父项,或parent_id如果它是小孩,然后按id排序。