Menü Website umbau von Pfadmodell auf Binären Baum

Menü Website umbau von Pfadmodell auf Binären Baum

am 20.06.2006 13:36:38 von Tobias

Hallo zusammen,

habe folgendes Problem.

Auf meiner Website habe ich ein Menü das über Datenbank folgende
Struktur enthält:

Tabelle: menupunkte
Felder:
`id` int(11) unsigned NOT NULL auto_increment,
`parent_id` int(11) default '0',
`pfad` varchar(255) default NULL,
`name` varchar(255) default NULL


Nun ist das Menü derzeit so aufgebaut das die parent_id immer die ID des
Vaterknotens enthält. Im Pfad Feld steht der gesamte Pfad bis zum
Kindknoten drin. Beispiel: 1:4:5:2
Heisst Root ist ID=1 und es gibt 3 Kindknoten.

Aus technischen Gründen möchte ich nun die bestehende Menüstruktur
anpassen von Pfad-Modell auf Nested-Set Modell.

Hierzu habe ich nun die Datenbankstruktur angepasst und 2 Felder zur
Struktur hinzugefügt:
`lft` int(11) unsigned NOT NULL default '0',
`rgt` int(11) unsigned NOT NULL default '0',

Das Nested-Set Modell ist mit den Parents ja anders aufgebaut:
bei allen Unterpunkten / Kindknoten wird immer die ID des Roots in das
parent_id Feld eingetragen. Soweit auch kein Problem das habe ich über
eine SQL Anweisung über den PFad regeln können und die Parent_id
aktualisiert.

Das Problem ist nun lft und rgt Werte des Nested-Sets Modell in der
bestehenden Struktur zu aktualisieren.

Ich bin soweit das ich die Gesamte Menüstruktur in einen Array in PHP
eingelesen habe.

Wie kann ich nun diese lft und rgt Felder für die Gesamte Struktur
berechnen.

Vielen Dank im Voraus,

Tobias

Re: Menü Website umbau von Pfadmodell auf Binären Baum

am 21.06.2006 11:03:11 von Tobias

Hallo,

Tobias schrieb:
> Wie kann ich nun diese lft und rgt Felder für die Gesamte Struktur
> berechnen.

also die Felder lft und rgt konnte ich über ein Script nun korrekt
setzen, die parentid ist nun nach dem nested-set Modell.

Mein nächstes Problem ist nun die Abfrage des Nested-set Modells für ein
Menü.
Es sollen nach einem Klick auf einen Hauptpunkt die dazugehörigen
Unterpunkte aufgehen.
Leider habe ich auch bei der Sortierung der Hauptpunkte probleme ich
habe zwar ein Prio Feld in der Datenbank nur das SQL Statement kappt
nicht mit Order By da ich das mit der Ebene / Level verknüpfen müsste
aber wie?

Hat jemand eine Lösung?
Danke im Voraus,


Tobias