Blaubart: nestet sets - nur eltern auslesen

Beitrag lesen

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. :)

--
Once is a mistake, twice is Jazz.