2017-07-28 126 views
-2

我有一个表:在单个表中查找所有家长的sql查询?

Id | child | parent 
1  67   0 
2  69  67 
3  79  68 
4  76  69 
7  75  68 

我想选择记录,直到父ID为零

在同一个表中的所有记录

+0

请提供输出示例以及您尝试过的代码。 – Alex

+0

select * from table_1 c,table_1 where c.ID = P.Parent and c.Parent!= 0 – Ankit

+0

它是一棵树吗?请解释属性的语义。数据的输出示例将很有用。 –

回答

1

从​​

一些数据库引用,特别是MySQL,在处理这个模型时会遇到一些问题,因为它需要能够运行MySQL缺乏的递归查询。

问题(和它的解决方案)的长,但非常详尽的解释可以在这里找到:Managing hierarchical data in mysql

TL/DR:如果你想使用单个查询来解决这个问题,那么你需要改变你的树到一个嵌套的列表结构 - 这是有点难以理解,但更有效的处理在MySQL中。

让我们这棵树:

  • 一个
    • Ç
      • d
      • Ë
    • ˚F

在您的邻接表格式,这将是这样的

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" 

至于如何做其他操作,请按照我发布的链接。

+0

那么,这是一个解决方案 – Strawberry

+0

感谢您的回复 但我想祖先的孩子和路径从儿童身份证到顶级父母 – Ankit

相关问题