我有一个标准的嵌套集模型,每个节点都有 ID、名称、所有者、lft 和 rgt 属性。给定输入的路径,例如:
//components/core/build/src/
我要搜索该文件
src
有一个名为
的父级build
这是树的样子
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。然而,由于有两个“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 新手,非常感谢任何帮助。
最佳答案
我不确定,但根据我对您的架构的理解,这是我的解决方案
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';
关于mysql - 当您认识 parent 时如何搜索特定的 child ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31419101/