2010-10-01 2 views
2

Я использую модель вложенного набора для моего дерева меню, и я пытаюсь получить узлы с некоторой фильтрацией. У меня есть несколько корневых узлов. Пример:Фильтрация вложенных множеств

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

Я хочу, чтобы вернуть все узлы «на», но не те, которые имеют родителей «от». Запрос для примера выше должен возвращать только Menu1 (и дети) и Menu3.

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

Для этого примера запрос должен возвращать все, кроме подменю4, и его дочерние элементы.

Любые идеи?

Заранее благодарен.

+0

Родственные: http://stackoverflow.com/questions/3642447/counting-records-belonging-to-a-category-in-mysql/3642539#3642539 – NullUserException

ответ

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 

То есть, выберите каждую строку, где нет строки с off, который содержит (или является той же строке,) целевой строки.

+0

Большое спасибо! ИДЕАЛЬНО!!! – artix

Смежные вопросы