nestet sets - nur eltern auslesen
tma
- php
hallo,
ich stehe auf dem schlauch!
nested sets geht soweit. nur bekomme ich es nicht hin, ein menü darzustellen.
ich schaffe es nur, alles zu listen (ist ja kein problem...)
beispiel menü
drucker
- canon
- eposn
monitore
- samsung
- sony
jetzt möchte ich, das NUR "drucker" und "monitore" angezeigt werden. blos wie gehe ich da vor?
der aufbau der tabelle ist typisch: ID | links | rechts | name
kann mir da jemand helfen?
gruß, tom
Tach.
drucker
- canon
- eposn
monitore- samsung
- sony
jetzt möchte ich, das NUR "drucker" und "monitore" angezeigt werden. blos wie gehe ich da vor?
Du möchtest alle Elemente einer bestimmten Ebene auswählen? In welcher Ebene sich ein Knoten befindet, kannst Du (in MySQL) folgendermaßen berechnen:
SELECT
COUNT(*) AS ebene,
n1.id,
n1.name
FROM
deineTabelle AS n1,
deineTabelle AS n2
WHERE
n1.links BETWEEN n2.links AND n2.rechts
GROUP BY
n1.links
Du gehst also alle vorhandenen Knoten durch, kuckst Dir deren L und R an, notierst die Knoten, deren L zwischen diesen beiden Werten liegt ... und packst aus dieser Zählung alle Knoten in eine gemeinsame Gruppe, die den gleichen Wert für L haben.
Wenn ein Knoten z. B. direktes Kind des Rootknotens ist, taucht er in der Zählung zweimal auf; einmal für "zwischen L und R des Rootknotens", ein weiteres Mal für seine eigenen L und R. Eine Ebene weiter unten taucht der Knoten dreimal auf usw. Die Größe der Gruppen (COUNT) gibt dir also die Ebene des Knotens. Der Rootknoten liegt in Ebene 1.
Den Rest bekommst Du sicher alleine hin. :)
n'abend,
nested sets geht soweit. nur bekomme ich es nicht hin, ein menü darzustellen.
ich fand den Artikel Nested Sets - Verschachtelte Bäume mit MySQL von Arne Klempert damals recht hilfreich.
weiterhin schönen abend...