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

How does this mySQL statement retrieve a single path?

我正在读这个 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']

我只想 return name/attributes 此路径上的元素。

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

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

我会得到一个这样的table:

| 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  |

但我想要这样的 table:

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

我需要一种方法来沿着数组中给定的路径前进,这样我才能到达正确的 'same' 节点。

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

试试

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

而不是

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