Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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
使用mysql从表中提取父级和子级列表_Mysql_Parent Child - Fatal编程技术网

使用mysql从表中提取父级和子级列表

使用mysql从表中提取父级和子级列表,mysql,parent-child,Mysql,Parent Child,我想从如下表中提取一个按父项排序的用户列表及其在父项之后的每个子项: id | name | parent_id ----| ---- | -------- 1 | max | 0 2 | john| 0 3 | jim | 1 4 | jack| 1 5 | merry| 2 我需要一个查询来提取每个父对象,然后是它的子对象:如下所示 max Jim jack john merry SELECT * F

我想从如下表中提取一个按父项排序的用户列表及其在父项之后的每个子项:

id  | name | parent_id
----| ---- | --------
 1  |  max |    0
 2  |  john|    0
 3  |  jim |    1
 4  |  jack|    1
 5  | merry|    2
我需要一个查询来提取每个父对象,然后是它的子对象:如下所示

 max
    Jim
    jack
 john
    merry
SELECT * FROM (
SELECT a.name AS `PARENT`, b.name AS `CHILD`
FROM db.table a 
JOIN db.table b ON b.parent_id=a.id 
WHERE a.parent_id=0
UNION ALL
SELECT c.parent_id AS `PARENT`,c.name AS `CHILD`
FROM db.table c WHERE c.parent_id=0 
);
我可以在彼此之间循环。但我搜索是否有sql查询解决方案。 我还测试了使用join table的方法,其本身由@Tucker在下面给出,但它返回以下内容:
它离我很近,但不只是我想要的。它检索以下内容:

-------------
max  |  jim
max  |jack
john |merry
---------------------
但我想举个例子

-----------------
0    |max
max  |Jim
max  |jack
0    |john
john |merry
------------------

我的语法可能有点不正确,但您可以像这样将表本身连接起来

 max
    Jim
    jack
 john
    merry
SELECT * FROM (
SELECT a.name AS `PARENT`, b.name AS `CHILD`
FROM db.table a 
JOIN db.table b ON b.parent_id=a.id 
WHERE a.parent_id=0
UNION ALL
SELECT c.parent_id AS `PARENT`,c.name AS `CHILD`
FROM db.table c WHERE c.parent_id=0 
);

示例中的行排序很难通过sql实现。

这很接近,但不仅仅是我想要的。它检索到以下内容:
--------------max | jim
max | jack
john | merry
但我想举个例子-----------------0 | max max | jim max | jack 0 | john john | merry--------------------我建议通过代码而不是sql进行排序。使用sql无法优雅地获得所需的顺序