Мы 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
этого ребенок и мы можем получить весь предок, поэтому мы перебираем их.
Является ли количество уровней каким-то ограничением? – Marki555
no it's inlimted – Youssef
Тогда это невозможно с одним запросом, если у вас есть таблица в этом формате. Существуют специальные форматы таблиц, которые позволяют вам запрашивать их таким образом. Или выполните каждый уровень с одним запросом и выполните рекурсию на PHP или на любом другом языке, который вы используете. – Marki555