Hallo liebe Community,
ich stehe hier vor einem "Problem".
Ich habe eine Tabelle mit Kategorien. Jede Kategorie hat einen eindeutige ID, eine Parent_ID und einen Namen. Die Parent_ID verweisst, wie der Name schon sagt, auf die Elternkategorie. Jetzt ist es so, das ich eine Oberkategorie gegeben habe (Oberkategorien haben eine Parent_ID von 0, d.h. sie haben keine Elternkategorien).
Jetzt sollen alle Unterkategorien ausgelesen werden aus der Datenbank. Das Ergebnis soll ein Array sein, mit allen Unterkategorien von der Oberkategorie. Eine Kategorie kann nur eine Unterkategorie, aber auch rein theoretisch auch 1000 Unterkategorien haben.
Leider unterstützt MySQL kein SQL Statement mit einem "WITH", also keine rekursive Abfrage auf der Serverseite, was z.B. in Oracle kein Problem darstellt.
Meine nächste Idee wäre eine rekursive Funktion gewesen, welche die Kategorien selectiert, die die Oberkategorie als Eltern haben (in einem Array gespeichert). Danach wird die selbe Funktion wieder aufgerufen, diesmal wird das Array durchlaufen und geschaut ob die da drinne enthaltenen Kategorien bei Kategorien in der Datenbank als Eltern auftretten, wenn ja wird diese Kategorien oder auch mehrere in das array hinzugefügt.
Sollte es keine weitere Unterkategorie mehr geben, wird diese Kategorie in dem Array dementsprechend markiert um "ünnötige" Queries an die Datenbank zu verhindern.
Mir kommt das ganze nur irgendwie so vor, als ob es am Ende eine sehr langsame Funktion sein wird.
Habt ihr entsprechende Verbesserungsvorschläge oder gar komplett andere Ansätze?
Hier nochmal das Layout der Tabelle:
ID | PID | Name
1 0 a
2 1 b
3 1 c
4 2 d
5 3 e
6 0 f
7 0 g
8 6 h
9 7 i
10 9 j
Wäre a die Oberkategorie, sollte das Array am Ende die Kategorien 2,3,4 und 5 enthalten.
Ich hoffe ich habe mich verständlich ausgedrückt.
Mit freundlichen Grüßen,
Mad Dog
ich stehe hier vor einem "Problem".
Ich habe eine Tabelle mit Kategorien. Jede Kategorie hat einen eindeutige ID, eine Parent_ID und einen Namen. Die Parent_ID verweisst, wie der Name schon sagt, auf die Elternkategorie. Jetzt ist es so, das ich eine Oberkategorie gegeben habe (Oberkategorien haben eine Parent_ID von 0, d.h. sie haben keine Elternkategorien).
Jetzt sollen alle Unterkategorien ausgelesen werden aus der Datenbank. Das Ergebnis soll ein Array sein, mit allen Unterkategorien von der Oberkategorie. Eine Kategorie kann nur eine Unterkategorie, aber auch rein theoretisch auch 1000 Unterkategorien haben.
Leider unterstützt MySQL kein SQL Statement mit einem "WITH", also keine rekursive Abfrage auf der Serverseite, was z.B. in Oracle kein Problem darstellt.
Meine nächste Idee wäre eine rekursive Funktion gewesen, welche die Kategorien selectiert, die die Oberkategorie als Eltern haben (in einem Array gespeichert). Danach wird die selbe Funktion wieder aufgerufen, diesmal wird das Array durchlaufen und geschaut ob die da drinne enthaltenen Kategorien bei Kategorien in der Datenbank als Eltern auftretten, wenn ja wird diese Kategorien oder auch mehrere in das array hinzugefügt.
Sollte es keine weitere Unterkategorie mehr geben, wird diese Kategorie in dem Array dementsprechend markiert um "ünnötige" Queries an die Datenbank zu verhindern.
Mir kommt das ganze nur irgendwie so vor, als ob es am Ende eine sehr langsame Funktion sein wird.
Habt ihr entsprechende Verbesserungsvorschläge oder gar komplett andere Ansätze?
Hier nochmal das Layout der Tabelle:
ID | PID | Name
1 0 a
2 1 b
3 1 c
4 2 d
5 3 e
6 0 f
7 0 g
8 6 h
9 7 i
10 9 j
Wäre a die Oberkategorie, sollte das Array am Ende die Kategorien 2,3,4 und 5 enthalten.
Ich hoffe ich habe mich verständlich ausgedrückt.
Mit freundlichen Grüßen,
Mad Dog