我有一个表:在单个表中查找所有家长的sql查询?
Id | child | parent
1 67 0
2 69 67
3 79 68
4 76 69
7 75 68
我想选择记录,直到父ID为零
在同一个表中的所有记录
我有一个表:在单个表中查找所有家长的sql查询?
Id | child | parent
1 67 0
2 69 67
3 79 68
4 76 69
7 75 68
我想选择记录,直到父ID为零
在同一个表中的所有记录
从
一些数据库引用,特别是MySQL,在处理这个模型时会遇到一些问题,因为它需要能够运行MySQL缺乏的递归查询。
问题(和它的解决方案)的长,但非常详尽的解释可以在这里找到:Managing hierarchical data in mysql
TL/DR:如果你想使用单个查询来解决这个问题,那么你需要改变你的树到一个嵌套的列表结构 - 这是有点难以理解,但更有效的处理在MySQL中。
让我们这棵树:
在您的邻接表格式,这将是这样的
id | text | parent
1 A
2 B 1
3 C 1
4 D 3
5 E 3
6 F 1
获取节点d的所有父母的不易。
现在我们将它转换为一组嵌套:
0_________________A__________________11
1_B_2 3_______C_______8 9_F_10
4_D_5 6_E_7
id | text | lft | rgt
1 A 0 11
2 B 1 2
3 C 3 8
4 D 4 5
5 E 6 7
6 F 9 10
现在越来越节点d的所有家长很简单:
SELECT p.* FROM nestedset p
INNER JOIN nestedset o ON o.lft > p.lft AND o.rgt < p.rgt
WHERE o.text == "D"
至于如何做其他操作,请按照我发布的链接。
那么,这是一个解决方案 – Strawberry
感谢您的回复 但我想祖先的孩子和路径从儿童身份证到顶级父母 – Ankit
请提供输出示例以及您尝试过的代码。 – Alex
select * from table_1 c,table_1 where c.ID = P.Parent and c.Parent!= 0 – Ankit
它是一棵树吗?请解释属性的语义。数据的输出示例将很有用。 –