2015-05-26 53 views
1

的所有孩子,我有MySQL選擇一個父

+----+-----------+------------+ 
| ID | ID_parent | name  | 
+----+-----------+------------+ 
| 7 | 5   | ....  | 
| 10 | 7   | ....  | 
| 11 | 5   | ....  | 
| 20 | 7   | ....  | 
| 30 | 10  | ....  | 
| 45 | 20  | ....  | 

此表爲ID=7我如何可以選擇所有的孩子,它的錨是7 =>(10,20,30,45)

+0

層次數是否有限? – Marki555

+0

不,它是有限制的 – Youssef

+0

然後當你有這種格式的表時,一個查詢是不可能的。有特殊的表格格式可以讓你像這樣查詢它們。或者用一個查詢來完成每個級別,並使用PHP或您使用的任何語言進行遞歸。 – Marki555

回答

0

我們dcide到,之間增加一個額外的列ancestors,我們把由,這樣

+----+-----------+------------+------------+ 
| ID | ID_parent | name  | ancestors | 
+----+-----------+------------+------------+ 
| 7 | 5   | ....  | ,7,  | 
| 10 | 7   | ....  | ,10,7,  | 
| 11 | 5   | ....  | ,11,5,  | 
| 20 | 7   | ....  | ,20,7,  | 
| 30 | 10  | ....  | ,30,10,7, | 
| 45 | 20  | ....  | ,45,20,7, | 

在我的情況下分開的孩子,我選擇把孩子的所有祖先親本和它的祖先我開始,我用,完成也許不同的方法可以根據情況使用。

所以現在我們可以很容易地得到父母的孩子或得到孩子的父親祖先。

  • 要找到父母的所有子我們使用LIKE %,idparent,%
  • 要找到孩子的家長們,我們分裂這個孩子 領域ancestors,我們可以得到所有的祖先,所以我們遍歷他們。