Kathi: Nested Sets Ebenen Problem, Having???

Ich habe folgende Abfrage in der der Ast mit der ID 4 ausgegeben wird (inklusive der ID 4)

SELECT o. * , COUNT( p.id ) -1 AS level  
FROM menu AS n, menu AS p, menu AS o  
WHERE o.lft  
BETWEEN p.lft  
AND p.rgt  
AND o.lft  
BETWEEN n.lft  
AND n.rgt  
AND n.id =4  
GROUP BY o.lft  
ORDER BY o.lft

Dann wird folgendes ausgegeben

id ! name ! lft ! rgt ! level

4 Menu    1 12 23 1
205 Ebene 2 13 14 2
206 Ebene 2 15 20 2
208 Ebene 3 16 17 3
209 Ebene 3 18 19 3
207 Ebene 2 21 22 2

Mein Wunschergebnis  ist nun das immer nur die Einträge die eine Ebene unterhalb der aufgerufenen ID sind sind ausgegeben werden, also wenn wie in meinem Beispiel die ID 4 abgefragt wird, soll

205 Ebene 2 13 14 2
206 Ebene 2 15 20 2
207 Ebene 2 21 22 2

oder wenn ID 206 abgefragt wird, dann eben

208 Ebene 3 16 17 3
209 Ebene 3 18 19 3

Mein Ansatz wäre es mit HAVING Level  =2 zu versuchen, aber wie bekomme ich den jeweiligen Level, der über der abgefragten ID ist heraus?

Kathi

  1. Tach!

    aber wie bekomme ich den jeweiligen Level, der über der abgefragten ID ist heraus?

    Das Problem ist, dass du generell das Level zur gewünschten ID wissen musst, so dass du jeden Datensatz damit vergleichen kannst. Dazu könntest du es einmalig berechnen und einer Variable zuweisen lassen. In der nächsten Abfrage kannst du diese Variable einsetzen. Alternativ ginge statt der Variable auch noch ein Subselect, aber das bläht deine Abfrage ziemlich auf.

    dedlfix.

  2. Hi,

    Ich habe folgende Abfrage in der der Ast mit der ID 4 ausgegeben wird (inklusive der ID 4)

    SELECT o. * , COUNT( p.id ) -1 AS level

    FROM menu AS n, menu AS p, menu AS o
    WHERE o.lft
    BETWEEN p.lft
    AND p.rgt
    AND o.lft
    BETWEEN n.lft
    AND n.rgt
    AND n.id =4
    GROUP BY o.lft
    ORDER BY o.lft

    
    >   
    >   
    > Dann wird folgendes ausgegeben  
    >   
    > id ! name ! lft ! rgt ! level  
    >   
    > 4	Menu    1	12	23	1  
    > 205	Ebene 2	13	14	2  
    > 206	Ebene 2	15	20	2  
    > 208	Ebene 3	16	17	3  
    > 209	Ebene 3	18	19	3  
    > 207	Ebene 2	21	22	2  
    >   
    >   
    > Mein Wunschergebnis  ist nun das immer nur die Einträge die eine Ebene unterhalb der aufgerufenen ID sind sind ausgegeben werden, also wenn wie in meinem Beispiel die ID 4 abgefragt wird, soll  
    >   
    > 205	Ebene 2	13	14	2  
    > 206	Ebene 2	15	20	2  
    > 207	Ebene 2	21	22	2  
    >   
    > oder wenn ID 206 abgefragt wird, dann eben  
    >   
    > 208	Ebene 3	16	17	3  
    > 209	Ebene 3	18	19	3  
    >   
    > Mein Ansatz wäre es mit HAVING Level  =2 zu versuchen, aber wie bekomme ich den jeweiligen Level, der über der abgefragten ID ist heraus?  
      
    Das sollte doch  n.level + 1  sein.  
      
    cu,  
    Andreas
    
    -- 
    [Warum nennt sich Andreas hier MudGuard?](http://MudGuard.de/)  
    [O o ostern ...](http://ostereier.andreas-waechter.de/)  
      
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.