2015-05-26 3 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

no it's inlimted – 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 этого ребенок и мы можем получить весь предок, поэтому мы перебираем их.
Смежные вопросы