Ich habe eine Tabelle, in der hierarchische Informationen mithilfe des Adjazenzlistenmodells gespeichert werden. (A. Selbst verweis Schlüssel verwendet - Beispiel unten kann diese Tabelle aussehen familiar):Abflachungslistenhierarchie auf eine Liste aller Pfade reduzieren
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
Was ist die beste Methode zu „glätten“ die obigen Daten in so etwas wie das?
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
Jede Zeile ist eine „Pfad“ durch die Hierarchie, außer es eine Zeile für jeder Knoten (nicht nur jeder Knoten Blatt) ist. Die Spalte category_id repräsentiert den aktuellen Knoten und die Spalten "lvl" sind seine Vorfahren. Der Wert für den aktuellen Knoten muss auch in der Spalte mit der höchsten Rechten liegen. Der Wert in der Spalte lvl1 wird immer den Stammknoten darstellen, die Werte in lvl2 werden immer direkte Nachkommen von lvl1 sein und so weiter.
Wenn möglich, wäre die Methode zum Generieren dieser Ausgabe in SQL und würde für n-Tier-Hierarchien funktionieren.
Für n-Tier-Hierarchien: Ist n im Voraus bekannt? –
Nein. Ich möchte, dass die Lösung generisch genug ist, um für jede Hierarchie zu funktionieren. Aber - Wenn 'n' bekannt ist, gibt es eine elegantere Lösung? –