在单个 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
我有一个 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