@ Olli
Danke, das ist echt interessant. Ich vergebe also jedem Eintrag die lft und rgt ID und habe damit Anzahl der eigentlichen Einträge mal 2. Sobald ich z.B. den 2.000sten Wert ändere gebe ich mit dem UPDATE an, dass er bei denen lft und rgt um 2 erhöhen soll welche nach diesem 2000sten Wert folgen.
Das der Updatebefehl schnell ist verstehe ich, aber ist er auch noch schnell, wenn häufig im unteren Bereich Änderungen vorgenommen werden und die Anzahl aller Werte z.B. 1.000.000 ist? Oder rechnet man dann mit MinusIDs? Das wäre ja dann im Endeffekt sinnvoll, da man dann im bis zu 0-49,99 % Fall für die Minusmethode entscheidet und im 50,01%-100% Fall für die Plusmethode.
Weil er muss ja sonst alles was höher ist als X immer wieder anpassen.
Aber vor allen Dingen.. wie filtere ich jetzt meinen Stammbaum? Ich meine ich muss ja jetzt erstmal herausfinden, wer der "älteste" Eintrag ist. Dann dessen Erben finden und das komplett als Baum berechnen lassen bevor ich klar die lft und rgt zuweisen kann
Gibt es ein Updatescript von phpBB2 auf auf phpBB3, dann könnte ich da ja schauen, wie man ca. lösen kann?
EDIT zur Performance:
habe das gelesen auf der Seite aus dem Link:
Dennoch muss an dieser Stelle zugunsten anderer Datenbankmodelle für Baumstrukturen eines festgehalten werden: Das Einfügen von Knoten ist der wunde Punkt der Nested Sets. Denn im schlimmsten Fall müssen bei der Einfügoperation die LFT-/RGT-Werte aller bestehenden Knoten verändert werden. Dies wirkt sich natürlich insbesondere bei sehr komplexen Bäumen negativ auf die Performance aus.
Das tangiert mich aber nicht sonderlich, da das hinzufügen der Einträge eh manuell gesteuert wird. D.h. Einträge werden moderiert aufgenommen oder eben nicht. Und das könnte man im Extremfall dann immer noch einmal am Tag per Cronjob abarbeiten lassen.
EDIT zum importieren der alten Einträge:
Damit bekomme ich ja eigentlich alle Einträge richtig in die Datenbank mit lft und rgt: (Ich muss das ja wegen dem Stammbaum gedanklich auf den Kopf stellen)
Code: Alles auswählen
SELECT COUNT... wie viele Einträge sind vorhanden
WHILE-Schleife.. für jeden Eintrag eine
SELECT $RGT und $LFT des Kindes bzw. der Kinder
UPDATE tree SET rgt=rgt+2 WHERE rgt >= $RGT;
UPDATE tree SET lft=lft+2 WHERE lft > $RGT;
ein Kind vorhanden:
Code: Alles auswählen
INSERT INTO tree (name,lft,rgt) VALUES ('Name des Kindes', $RGT, $RGT +1);
alternativ mehrere Kinder:
???
Als letztes folgt der nächste Eintrag in der WHILE-Schleife usw. bis alle Einträge abgearbeitet wurden.
D.h. beim Import verwende ich dann so viele INSERTs wie Kinder vorhanden sind, um den richtigen lft und rgt zu ermitteln. Mal im Kopf durchgehen.. klappt das auch, wenn kein Kind vorhanden ist, also ein Level 0 Kind ausgelesen wurde......
EDIT:
Irgendwie scheint das gar nicht zu gehen.. ich habe mal einen Minidatensatz aus dem Stammbaum aufgemalt:
[ externes Bild ]
Oben sind drei Kd von Mt & Vt, wiederrum ist Mt die Schwester von Kd und Tochter von Mt & Vt. Parallel dazu ist der Vt Einzelkind von Mt & Vt.
Ich sehe da irgendwie keine Möglichkeit mit lft und rgt zu arbeiten, da keine Baumstruktur in der Datenbank ist. Klar bei der Ausgabe der Daten hat man einen Baum, aber die Daten selber bilden keinen.