使用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无法优雅地获得所需的顺序