dedlfix: Nested Sets - Ebene auslesen (SQL)

Beitrag lesen

Hi!

Mir brennt der Kopf und ich würde es gerne heute noch fertig kriegen. Könntest du mir die Abfrage schreiben? Ich werde sie nicht einfach nur übernehmen aber ich würde es dann einfach verstehen.

Mach es schrittweise. Eine Beispiel für eine Abfrage, die ein Level ermittelt, gibt es beispielsweise im MySQL-Artikel zu Nested Sets (Zwischenüberschrift: Finding the Depth of the Nodes). node.name brauchst du nicht in der Abfrage, Sortieren ist auch egal. Führ die Abfrage erst einmal (mit node.name) aus, um die Richtigkeit zu bestätigen. Sie bildet die Grundlage für das Subselect, das als korrelierte Unterabfrage eingebunden werden wird. Als nächsten Schritt baust du eine Einschränkung auf einen einzigen Knoten ein (WHERE um node.catagory_id=? erweitern). Beim Einsetzen der Subquery in die eigentliche Abfrage tauschst du das ? gegen eine Referenz auf die in der Haupt-Query aktuelle ID aus.

Die passende Stelle wäre anstelle des Wortes level in deiner WHERE-Klausel. In der SELECT-Klausel brauchst du sie nicht, denn das Level weißt du ja bereits vor der Abfrage. Es ist ja in deinem Fall auch immer der gleiche Wert. Wenn es doch in der SELECT-Klausel auftauchen soll, dann müsstest du die Subquery dort noch einmal hinschreiben. Sie nur im SELECT anzuführen geht nicht, weil beim Ausführen des WHERE das SELECT noch nicht ausgewertet wurde, und dort berechnete Werte nicht berücksichtigt werden können. Das ginge erst im HAVING.

Lo!