Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从自引用mysql表中检索父子层次结构_Php_Mysql_Pdo - Fatal编程技术网

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

Php 从自引用mysql表中检索父子层次结构,php,mysql,pdo,Php,Mysql,Pdo,我有一个类似这样的mysql表,删除了其他列,与问题无关: id parent_id ----------- ----------- 1 0 2 0 3 0 4 3 5 2 6 1 7 1 父项是父项id为0的行 我想知道是否有一种方法

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

id          parent_id
----------- -----------
1           0          
2           0            
3           0          
4           3          
5           2
6           1
7           1          
父项是父项id为0的行

我想知道是否有一种方法可以表述查询,以便MySQL在其父项之后输出每个子项的行

预期的结果将是

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

谢谢您的时间。

MySQL不支持递归查询,因此如果一个孩子可以有孩子,那么就没有办法制定这样的查询。否则,此查询应按您需要的顺序返回行:

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

请看小提琴。诀窍是,如果是父项,则按id对行进行排序;如果是子项,则按id对行进行排序。

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

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

请看小提琴。诀窍是,如果是父项,则按id排序,如果是子项,则按父id排序,然后按id排序。

Genius。以前从未见过CASE的用法。强大的天才以前从未见过CASE的用法。强大的