2015-05-26 95 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,我们可以得到所有的祖先,所以我们遍历他们。