Nested Set nur eine Ebene tief aulesen

schmidex

Grünschnabel
Hallo zusammen. Ich habe mich mal an Nested Sets gewagt. Und stoße auf zahlreiche Probleme. Vielleicht kann mir hier ja jemand helfen.

Habe mir einen Baum nach einem Tutorial zu Testzwecken erstellt.
abb3.png


Zu jedem Eintrag gehört nur.. id,name,lft,rgt

Wie kann ich jetzt mit einer einzelnen SQL query nur die ersten Nachkommen einer bestimmten ID auslesen.

Beispiel:
Meine Wurzel hat die ID=1. Ich will zu dieser ID meiner einer Query nur die beiden direkten Nachkommen Primaten und Nagetiere erhalten. Nichts, was tiefer im Baum liegt. Ist das möglich? Danke schonmal.

Hoffe ich habe mein Problem einigermaßen gut beschrieben.
 
Moin,

ich wollte diesen Thread nochmal auffrischen und Fragen ob schmidex denn zu einem Ergebnis gekommen ist. Ich hänge gerade an demselben Problem. Wäre nett, wenn Du die Lösung präsentieren könntest, sofern Du zu einer gekommen bist.

Vielen Dank.
 
Ich hab das Problem jetzt lösen können, also falls jemand mal das selbe Problem haben sollte, hier ein Lösungsansatz.
Als Grundlage für das nachfolgendet Statement hab ich eine Grafik dem Beitrag beigefügt.
Möchte man jetzt nur die direkten Nachfahren von "Säugetiere" ermitteln dann könnte man dies so machen:
Code:
SELECT 
    o.*,
    COUNT(p.id)-1 AS level
FROM NestedSet AS n, 
    NestedSet AS p, 
    NestedSet AS o 
WHERE o.lft BETWEEN p.lft AND p.rgt 
    AND o.lft BETWEEN n.lft AND n.rgt
    AND n.id = 1 
GROUP BY o.lft
HAVING level = 1
ORDER BY o.lft

Alle direkten Nachfahren von "Säugetiere" haben als "level" den Wert 1, die Einschränkung hierzu erfolgt im Having-Teil.

Falls jemand einen anderen Lösungsweg hat, nur zu, würde mich selbstverständlich auch interessieren.
 

Anhänge

  • tab1.png
    tab1.png
    4,4 KB · Aufrufe: 85
Zurück