我正在阅读此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 |
我需要一种方法沿着数组中给出的路径,这样我就可以到达正确的“相同”节点。
答案 0 :(得分:0)
您的变体不起作用,因为"same"
不是唯一的,正如原始查询所假设的那样。
尝试
WHERE (...) node.id = 6 -- or 8
而不是
WHERE (...) node.name = 'same'