好,數據庫系統可以執行的查詢結果相同幾種不同的方法,但這裏有一個方法來了解這是怎麼回事:
就拿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」值排序,所以爲了滿足查詢,我們只取名稱值,然後完成。
謝謝你的明確解釋:) – alimango 2009-09-15 07:54:06