В глубине души я чувствую, что для этого должно быть очень простое рекурсивное решение, но я не могу сразу его понять.
У меня есть дерево, хранящееся в SQL как таблица закрытия. Дерево выглядит так: (1 (2 (3), 4)), а языки — MySQL SQL и PHP 5.3.
Таким образом, таблица закрытия:
+----------+------------+
| ancestor | descendant |
+----------+------------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 2 | 3 |
+----------+------------+
Я могу легко запросить предков с помощью:
SELECT descendant AS id, GROUP_CONCAT(ancestor) as ancestors FROM
closure GROUP BY (descendant);
+----+-----------+
| id | ancestors |
+----+-----------+
| 1 | 1 |
| 2 | 2,1 |
| 3 | 3,1,2 |
| 4 | 4,1 |
+----+-----------+
Как я могу легко построить дерево в PHP с этими данными? Могу ли я использовать более разумный запрос, чтобы получить больше данных из MySQL?