2009-09-15 35 views
0

我讀this article 並與查詢部分:在MySQL中如何遍歷嵌套集合模型?

SELECT node.name 
FROM nested_category AS node, 
nested_category AS parent 
WHERE node.lft BETWEEN parent.lft AND parent.rgt 
AND parent.name = 'ELECTRONICS' 
ORDER BY node.lft; 

我不知道它是如何travered?一步一步發生什麼?我很困惑,請幫助。

回答

3

好,數據庫系統可以執行的查詢結果相同幾種不同的方法,但這裏有一個方法來了解這是怎麼回事:

就拿nested_category表,一個命名爲家長和其他命名的2份節點。在名爲ELECTRONICS的父級中找到該行(您鏈接到的文章意味着只有一行)。 parent.rgt的範圍parent.lft給出任何具有ELECTRONICS的節點作爲樹中的祖先,在任何深度。

通過node.lft進行排序意味着您將首先沿着子樹的左側獲取ELECTRONICS的子節點pre-order traversal

可能更容易通過一個簡單的例子,步行到明白這一點:如果我們選擇的電視機,而不是電子作爲父:

的「父」集有因爲[parent.name只有1列, = 'TELEVISIONS']:

{ name: "TELEVISIONS", lft: 2, rgt: 9 } 

的 '節點' 組具有4行滿足[node.lft 2之間和9],因爲我們可以從親本替代單個LFT/RGT值:

{ name: "TELEVISIONS", lft: 2, rgt: 9 } 
{ name: "TUBE",  lft: 3, rgt: 4 } 
{ name: "LCD",   lft: 5, rgt: 6 } 
{ name: "PLASMA",  lft: 7, rgt: 8 } 

而且,正如您所看到的,上面的4行已經按照「lft」值排序,所以爲了滿足查詢,我們只取名稱值,然後完成。

+0

謝謝你的明確解釋:) – alimango 2009-09-15 07:54:06