在一个表中查找所有父sql查询?

时间:2017-07-28 06:52:18

标签: php mysql sql recursive-query

我有一张桌子:

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

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

同一张表中的所有记录

1 个答案:

答案 0 :(得分:1)

引用How to represent a data tree in sql

  某些数据库,尤其是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"

关于如何进行其他操作,请点击我发布的链接。