如何在了解父母时搜索特定的孩子?

时间:2015-07-14 23:29:22

标签: mysql sql database tree nested-sets

我有一个标准的嵌套集模型,每个节点都有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的新手,感谢任何帮助。

1 个答案:

答案 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';