Najłatwiejszy sposób na zbudowanie drzewa z listy Przodków
W moim sercu czuję, że musi istnieć super proste rekurencyjne rozwiązanie tego problemu, ale nie mogę od razu tego zatrzeć.
Mam drzewo zapisane w SQL jako tabelę zamknięcia. Drzewo wygląda następująco: (1 (2 (3), 4)), a językami są SQL i PHP 5.3 MySQL.
Tabela zamknięcia jest zatem:
+----------+------------+
| ancestor | descendant |
+----------+------------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 2 | 3 |
+----------+------------+
Mogę łatwo zapytać przodków za pomocą:
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 |
+----+-----------+
Jak mogę łatwo zbudować drzewo w PHP z tymi danymi? Czy mogę użyć inteligentniejszego zapytania, aby pobrać więcej danych z MySQL?