Halihallo Jose
Meine Frage an Euch nun, kennt jemand eine bessere Methode, um dieses Problem zu lösen? Ich bin mit MySQL noch nicht wirklich sattelfest und könnte mir vorstellen, dass es da einen effizienteren Lösungsansatz gibt.
Dem Hinweis von Robert kann ich nur entsprechen. Datenbanken sind nicht auf hierarchische
Daten getrimmt, XML bildet diese hierarchischen Strukturen schon wesentlich besser ab,
was jedoch nicht umbedingt heisst, dass es mit XML performanter umzusetzen ist.
Hast du wirklich eine derart verworrene und tiefe Verschachtelung, als dass sich dein
Problem als zu aperformant erweist? - Bekommst du evtl. mit einem Index[1] auf parentCat
bessere Ergebnisse?
Dein Problem lässt sich _nicht_ "schön" lösen[2], jedoch lässt es sich wesentlich
verbessern:
Jede Kategorie hat ein Attribut subcatCount, welches die Anzahl Unterkategorien
speichert. Dieses Attribut ändert sich _nur_ beim hinzufügen oder löschen einer
Unterkategorie, verschnellert jedoch die Abfrage um ein vielfaches. Natürlich ist diese
Information redundant (und das sollte eigentlich vermieden werden) und erhöht die
Fehleranfälligkeit und den Wartungsaufwand der Software, aber vielleicht ist das für
dich ein kleiner Preis für den Mehrgewinn an Performance?
[1] der für deine Aufgabenstellung wirklich zu empfehlen wäre, wenn du viele Kategorien
verwaltest.
[2] Es gibt in SQL keine Rekursion. Es sei denn, du verwendest ein Datenbanksystem,
welches sogenannte Stored Procedures unterstützt, was in deinem Fall nicht vorliegt. Und
auch wenn, so würde es dennoch nicht effizient verarbeitet werden können.
Viele Grüsse
Philipp