A maneira mais fácil de construir uma árvore a partir de uma lista de ancestrais

Em meu coração, sinto que deve haver uma solução recursiva super simples para isso, mas não posso imediatamente criá-la.

Eu tenho uma árvore armazenada no SQL como uma tabela de fechamento. A árvore se parece com: (1 (2 (3), 4)), e as linguagens são SQL e PHP 5.3 do MySQL.

A mesa de fechamento é assim:

+----------+------------+
| ancestor | descendant |
+----------+------------+
|        1 |          1 | 
|        2 |          2 | 
|        3 |          3 | 
|        4 |          4 | 
|        1 |          2 | 
|        1 |          3 | 
|        1 |          4 | 
|        2 |          3 | 
+----------+------------+

Eu posso consultar os ancestrais facilmente com:

 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       | 
 +----+-----------+

Como posso facilmente construir uma árvore em PHP com esses dados? Posso usar uma consulta mais inteligente para extrair mais dados do MySQL?

questionAnswers(2)

yourAnswerToTheQuestion