En mi corazón, creo que debe haber una solución recursiva muy simple para esto, pero no puedo asimilarlo de inmediato.La forma más fácil de construir un árbol a partir de una lista de Antepasados
Tengo un árbol almacenado en SQL como una tabla de cierre. El árbol se ve así: (1 (2 (3), 4)), y los lenguajes son SQL de MySQL y PHP 5.3.
La mesa de cierre es por lo tanto:
+----------+------------+
| ancestor | descendant |
+----------+------------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 2 | 3 |
+----------+------------+
puedo consultar los antepasados con bastante facilidad:
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 |
+----+-----------+
¿Cómo puedo construir fácilmente un árbol en PHP con estos datos? ¿Puedo usar una consulta más inteligente para extraer más datos de MySQL?
¡Interesante! eso tiene sentido, los padres siempre tendrán menos ancestros que sus hijos. –