Самый простой способ построить дерево из списка предков
В моем сердце я чувствую, что должно быть очень простое рекурсивное решение этого, но я не могу немедленно это ухватить.
У меня есть дерево, хранящееся в 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?