嵌套集过滤

时间:2010-10-01 16:22:21

标签: mysql nested set

我正在使用嵌套集模型作为我的菜单树,我正在尝试通过一些过滤来获取节点。我有几个根节点。 例如:

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以外的所有子节点。

有什么想法吗?

提前致谢。

1 个答案:

答案 0 :(得分: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的行的每一行包含(或与目标行相同的行)。