tma: nestet sets - nur eltern auslesen

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

  1. 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.
  2. 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...

    --
    Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
    sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|