Самый простой способ построить дерево из списка предков

В моем сердце я чувствую, что должно быть очень простое рекурсивное решение этого, но я не могу немедленно это ухватить.

У меня есть дерево, хранящееся в 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?

Ответы на вопрос(2)

Ваш ответ на вопрос