2012-05-21 37 views
1

傍晚MySQL嵌套集合加入检索路径

我有两个表格:网址为&的地方。为了简化,数据是这样的:

URLS:

urlID url 
1  /england 
2  /scotland 
3  /wales 

地方:

placeId name  lft rgt  urlRef 
1   England  1  23000  1 
2   Scotland 23001 37000  2 
3   Wales  37001 50000  3 

的地方台则已经嵌套在国家内部进一步的地方。我希望能够加入两个表来选择喜欢的我的地方的路径:

England  /england 
Shropshire /england/shropshire 
Shrewsbury /england/shropshire/shrewsbury 

我第一次尝试这样,它不工作等各种方式也没有吃。

SELECT node.name, url 
FROM places AS node, places AS parent LEFT JOIN urls ON urlId = node.urlRef 
WHERE node.lft BETWEEN parent.lft AND parent.rgt AND urlId = 1 
ORDER BY node.lft 
+0

SELECT node.name,网址 从URL中LEFT JOIN AS节点放在node.urlRef = urls.urlId,地方父 WHERE node.lft BETWEEN parent.lft和parent.rgt AND urlId = 46 ----这提供了一个结果,其结果数量正确,但所有结果都是相同的结果,而不是路径。 –

+0

下面是答案: SELECT parent.name 从URL中LEFT JOIN AS节点上node.urlRef = urls.urlId地方,地方父 WHERE node.lft BETWEEN parent.lft和parent.rgt和node.urlRef = 46 –

回答

0

你需要加入的父节点上:

SELECT parent.placeId, parent.name, parent.type, parent.ico, url 
FROM places AS node, urls LEFT JOIN places AS parent ON parent.urlRef = urls.urlId 
WHERE node.lft BETWEEN parent.lft AND parent.rgt AND node.urlRef = :urlId 
ORDER BY parent.lft