我有一个标准的嵌套集模型,每个节点都有ID,name,owner,lft和rgt属性。给定输入路径,例如:
//组件/核心/建造/ SRC /
我想搜索文件
的src
具有名为
的父级构建
以下是树的外观
components
|
core
|
build
/ \
src 1.0
|
src
如何使用mySQL查询特定父级的特定src?
这是我现在的查询:
SELECT parent.file_id, parent.owner, parent.name
FROM file_category AS node, file_category AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.name = 'src'
这会返回接近我想要的东西。如果树没有重复,那就行了。
它返回树的每个节点的属性,直到它到达src。但是,因为有两个&s; src'节点,它返回它们共同的祖先两次,然后分支并从每个'src'的不同祖先返回属性。
所以返回的表看起来像这样:
owner name
dez components
dez components
sam core
sam core
tom build
tom build
mai src
jim 1.0
bob src
它将两次返回他们的共同祖先。
我想试试这个:
SELECT parent.file_id, parent.owner, parent.name
FROM file_category AS node, file_category AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.name = 'src' AND parent.name = 'build'
但是这会返回一个包含两个构建行的表。也许是因为他们都有共同的构建祖先?
我也尝试了这个,但得到了与上面的查询相同的结果:
SELECT parent.file_id, parent.owner, parent.name
FROM file_category AS node, file_category AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.name = 'src' AND parent.name = 'build' AND parent.lft = 3
另外,我查看了这个与我的问题非常接近的question,然而,提供的答案并没有奏效。
我是SQL的新手,感谢任何帮助。
答案 0 :(得分:0)
我不确定,但根据我对您的架构的理解,这是我的解决方案
SELECT parent.file_id, parent.owner, parent.name
FROM file_category AS node, file_category AS parent
WHERE (node.file_id = parent.lft OR node.file_id = parent.rgt)
AND node.name = 'src';