Nested Sets Ebenen Problem, Having???
Kathi
- datenbank
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
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.
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.