在单个 table 中查找所有 parents sql 查询?

Find all parents sql query with in a single table?

我有一个 table:

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

我想 select 记录直到 parent id 为零

同一 table

中的所有记录

引用自How to represent a data tree in sql

some databases, particularly MySQL, have some issues in handling this model, because it requires an ability to run recursive queries which MySQL lacks.

可以在此处找到对问题(及其解决方案)的冗长但非常详尽的解释:Managing hierarchical data in mysql

TL/DR:如果你想用单个查询解决这个问题,那么你需要将树更改为嵌套列表结构——这有点难以理解,但在 [= 中处理起来更有效53=].

让我们拿这棵树:

  • 一个
    • B
    • C
      • D
      • E
    • 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"

至于其他的操作,按照我发的link