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?