这个mySQL语句如何检索单个路径?

时间:2015-07-15 22:49:27

标签: php mysql database nested-sets

我正在阅读此article,我不明白此查询的工作原理:

SELECT parent.name
FROM nested_category AS node,
    nested_category AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
    AND node.name = 'FLASH'
ORDER BY node.lft;

我正在尝试理解它是如何工作的,因为我需要为我的程序略微修改它。

我使用嵌套集模型将数据存储在分层数据库中。

它可以这样显示:

    link
     |
   saria
     |
    roy
     |
   olimar
   /   \
blue    red
 |       |
same    same

给出像这样的数组

  
    

['link','saria','roy','olimar','blue','same']

  

我想仅返回此路径中元素的名称/属性。

当我使用上面的查询略微修改时:

SELECT DISTINCT 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 = 'same' order by parent.lft

我会得到一张这样的表:

| file_id | name | owner | 
|    1    | link |  dez  |
|    2    | saria|  madi |
|    3    | roy  |  wrm  |
|    4    | oli  |  mart |
|    5    | blue |  bob  |
|    6    | same |  jim  |
|    7    | red  |  tom  |
|    8    | same |  kim  |

但我想要一张这样的表:

| file_id | name | owner | 
|    1    | link |  dez  |
|    2    | saria|  madi |
|    3    | roy  |  wrm  |
|    4    | oli  |  mart |
|    5    | blue |  bob  |
|    6    | same |  jim  |

我需要一种方法沿着数组中给出的路径,这样我就可以到达正确的“相同”节点。

1 个答案:

答案 0 :(得分:0)

您的变体不起作用,因为"same"不是唯一的,正如原始查询所假设的那样。

尝试

WHERE (...) node.id = 6 -- or 8

而不是

WHERE (...) node.name = 'same'