仅从查询中获取父>child1_1>child1_1_1>child1_1_1_1 结构
Getting parent>child1_1>child1_1_1>child1_1_1_1 structure only from query
我有一个包含 3 列的 table,例如:
name | id | parent_id
XYZ | 1 | 2
ZYX | 3 | 1
YXZ | 4 | 3
是否可以仅从 mysql 查询中检索一个可以像 "parent>child1_1>child1_1_1>child1_1_1_1" 等一样简单地读取为字符串的结果?层次结构树的最大深度为 4,"parent" 的 parent_id=0。在 php 中构建它让我很头疼。
更具体地说,父类别有多个子类别,子类别也有多个子类别...我想获取所有记录,如"Computer>Networking>Routers"、"Computer>Networking>Switches"等结果。
非常感谢!
通常这是使用递归ctes完成的,mysql不支持它
由于你的深度只有4层,你可以使用self left join
连接parents如下
concat_ws
用于连接名字。
更新了答案以获得最深的 child id,为此需要使用 coalesce
select coalesce(t3.id,t2.id, t1.id) as deepChildId,
concat_ws('->', t.name ,t1.name, t2.name, t3.name ) as childList
from Table1 t
left join Table1 t1
on t.id = t1.parent_id
left join Table1 t2
on t1.id = t2.parent_id
left join Table1 t3
on t2.id = t3.parent_id
where t.parent_id =0
我有一个包含 3 列的 table,例如:
name | id | parent_id
XYZ | 1 | 2
ZYX | 3 | 1
YXZ | 4 | 3
是否可以仅从 mysql 查询中检索一个可以像 "parent>child1_1>child1_1_1>child1_1_1_1" 等一样简单地读取为字符串的结果?层次结构树的最大深度为 4,"parent" 的 parent_id=0。在 php 中构建它让我很头疼。
更具体地说,父类别有多个子类别,子类别也有多个子类别...我想获取所有记录,如"Computer>Networking>Routers"、"Computer>Networking>Switches"等结果。
非常感谢!
通常这是使用递归ctes完成的,mysql不支持它
由于你的深度只有4层,你可以使用self left join
连接parents如下
concat_ws
用于连接名字。
更新了答案以获得最深的 child id,为此需要使用 coalesce
select coalesce(t3.id,t2.id, t1.id) as deepChildId,
concat_ws('->', t.name ,t1.name, t2.name, t3.name ) as childList
from Table1 t
left join Table1 t1
on t.id = t1.parent_id
left join Table1 t2
on t1.id = t2.parent_id
left join Table1 t3
on t2.id = t3.parent_id
where t.parent_id =0