2011-04-24 87 views
1
"SELECT parent.name 
FROM categories AS node, 
categories AS parent 
WHERE node.left_node BETWEEN parent.left_node AND parent.right_node 
AND node.name = '{$node_name}' 
ORDER BY parent.right_node AND node.left_node" 

上面的查詢將顯示調用節點的根的所有父項。我只想獲取下一個父項,而不是所有到根的路,但只有上面的節點。例如在下面的圖形構造SQL語句以深度顯示

http://img97.imageshack.us/img97/7139/fruittree.gif

如果我把RED聲明將拉動水果和糧食,而是我想查詢的結構,只拉第二天節點RED僅是「水果「,不需要根節點」食物「。

回答

0

您可以利用任何節點剩餘值大於其父值(或者右值小於其父值)的事實,並使用limit返回所需值。

ORDER BY parent.left_node desc 
LIMIT 1 

這是mysql synax,我不確定你使用的是什麼rdbms。

在我看來,似乎可能有更好的方法。

+0

SELECT parent.name FROM類別AS節點, 類別AS父 WHERE node.left_node> parent.left_node AND node.name = '{$ NODE_NAME}' ORDER BY parent.left_node DESC LIMIT 1" 這工作! – fello 2011-04-24 18:21:56

+0

我不得不說,在樹上,如果我叫node.left_node> parent.left_node黃色它將拉紅色作爲它的父母:(而不是水果。但如果我打電話紅色它會拉起水果因爲left_node的節點RED只是大於FRUIT的左邊?讓我試試其他條件與小於 – fello 2011-04-24 18:40:04

+0

謝謝保羅,它解決了它。我可以看到SQL是非常強大的 – fello 2011-04-24 18:51:42