Фильтрация вложенных множеств - PullRequest
2 голосов
/ 01 октября 2010

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

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)

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

Anyидеи?

Заранее спасибо.

1 Ответ

3 голосов
/ 01 октября 2010
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, которая содержит (или совпадает со строкой) целевую строку.

...