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

时间:2014-08-13 16:55:50

标签: 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

我可以用它来互相循环。但我搜索是否有一个SQL查询解决方案。 我也测试了使用连接表的方式,下面由@Tucker提供,但它返回: 它接近但不仅仅是我想要的。它检索这个:

-------------
max  |  jim
max  |jack
john |merry
---------------------

但我想要例如

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

1 个答案:

答案 0 :(得分:0)

我的语法可能略有偏差,但你可以像这样加入表格

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实现很难。