2010-10-01 8 views
2

J'utilise un modèle de jeu imbriqué pour mon arborescence de menus, et j'essaie d'obtenir des nœuds avec un certain filtrage. J'ai plusieurs noeuds racines. Exemple:Filtrage de jeux imbriqués

Menu1(on) 
\-Submenu1(on) 
\-Submenu2(on) 
Menu2(off) 
\-Submenu3(on) 
\-Submenu4(on) 
    \-Submenu5(on) 
Menu3(on) 

Je veux retourner tous les noeuds « sur », mais pas ceux qui ont des parents « off ». La requête, pour l'exemple ci-dessus, doit renvoyer uniquement Menu1 (et enfants) et Menu3.

Menu1(on) 
\-Submenu1(on) 
\-Submenu2(on) 
Menu2(on) 
\-Submenu3(on) 
\-Submenu4(off) 
    \-Submenu5(on) 
Menu3(on) 

Pour cet exemple, la requête doit renvoyer tout sauf Submenu4 et ses enfants.

Des idées?

Merci d'avance.

+0

Connexes: http://stackoverflow.com/questions/3642447/counting-records-belonging-to-a-category-in-mysql/3642539#3642539 – NullUserException

Répondre

3
SELECT t0.* 
FROM sometable AS t0 
LEFT JOIN sometable AS t1 ON t0.lft BETWEEN t1.lft AND t1.rgt AND t1.active='off' 
WHERE t1.lft IS NULL 
ORDER BY t0.lft 

Autrement dit, sélectionner chaque ligne où il n'y a pas de ligne avec off qui contient (ou est la même rangée que) la ligne cible.

+0

Merci beaucoup! PARFAIT!!! – artix