我有一個表:在單個表中查找所有家長的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
它是一棵樹嗎?請解釋屬性的語義。數據的輸出示例將很有用。 –