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