2017-07-28 47 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

相關問題