Tengo una tabla que almacena información jerárquica utilizando el modelo de lista de adyacencia. (. Utiliza una clave de auto referencial - Este ejemplo siguiente tabla puede ser familiar):Aplanar jerarquía de lista de adyacencia a una lista de todas las rutas
category_id name parent
----------- -------------------- -----------
1 ELECTRONICS NULL
2 TELEVISIONS 1
3 TUBE 2
4 LCD 2
5 PLASMA 2
6 PORTABLE ELECTRONICS 1
7 MP3 PLAYERS 6
8 FLASH 7
9 CD PLAYERS 6
10 2 WAY RADIOS 6
¿Cuál es el mejor método para "aplanar" los datos anteriores en algo como esto?
category_id lvl1 lvl2 lvl3 lvl4
----------- ----------- ----------- ----------- -----------
1 1 NULL NULL NULL
2 1 2 NULL NULL
6 1 6 NULL NULL
3 1 2 3 NULL
4 1 2 4 NULL
5 1 2 5 NULL
7 1 6 7 NULL
9 1 6 9 NULL
10 1 6 10 NULL
8 1 6 7 8
Cada fila es una "trayectoria" a través de la Jerarquía, excepto que hay una fila para cada nodo (no sólo cada nodo hoja). La columna category_id representa el nodo actual y las columnas "lvl" son sus antepasados. El valor para el nodo actual también debe estar en la columna más lejana de la derecha. El valor en la columna lvl1 siempre representará el nodo raíz, los valores en lvl2 siempre representarán descendientes directos de lvl1, y así sucesivamente.
Si es posible, el método para generar esta salida sería en SQL, y funcionaría para las jerarquías de n niveles.
Para las jerarquías de nivel n: ¿se conoce n por adelantado? –
No. Me gustaría que la solución fuera lo suficientemente genérica para funcionar para cualquier jerarquía. Pero, si se sabe 'n', ¿hay una solución más elegante? –