Ich bastle mit NestedSets herum und möchte gerne einen neuen Knoten einfügen. Ein Baum besitzt bei mir mehrere Wurzeln, d.h. der neue Knoten soll als neue Wurzel angelegt werden. Das heißt, der linke Wert des neuen Knotens besitzt den Wert MAX(rgt)+1, der rechte Wert MAX(rgt)+2. Das kann ich auch ganz fein in einer INSERT-Query mit Subselect verpacken und sieht dann zum Beispiel so aus:
Das ist soweit in Ordnung und klappt auch wunderbar.
Die Frage ist jetzt, muss ich an dieser Stelle wirklich zwei Subselects nutzen, oder kann ich den Wert für rgt nicht direkt auf lft+1 setzen. Ich habe das in MySQL getestet und das klappt, wenn ich erst lft und anschließend rgt setze, d.h. die Reihenfolge ist entscheidend. Gilt dies denn immer? Im Grunde fehlt mir nur das kleine Schnippselchen Dokumentation, welches mir sagt, dass die Auswertungsreihenfolge immer von links nach rechts ist und rgt definitiv den Wert lft+1 annimmt.
Kann mir da jemand von den SQL-Profis etwas mehr zu sagen?
Code:
insert into nodes set lft=(select max(rgt) from nodes as n)+1, rgt=(select max(rgt) from nodes as n)+2, data=...
Die Frage ist jetzt, muss ich an dieser Stelle wirklich zwei Subselects nutzen, oder kann ich den Wert für rgt nicht direkt auf lft+1 setzen. Ich habe das in MySQL getestet und das klappt, wenn ich erst lft und anschließend rgt setze, d.h. die Reihenfolge ist entscheidend. Gilt dies denn immer? Im Grunde fehlt mir nur das kleine Schnippselchen Dokumentation, welches mir sagt, dass die Auswertungsreihenfolge immer von links nach rechts ist und rgt definitiv den Wert lft+1 annimmt.
Kann mir da jemand von den SQL-Profis etwas mehr zu sagen?
Kommentar