2012-08-08 23 views
3

父級左側和父級右側是什麼?openerp中的父級左側和父級右側

它是如何工作的Openerp

感謝

+0

仔細查閱鏈接給出下它有大約家長留下了非常好的解釋和父權 http://www.serpentcs.com/serpentcs-openerp-parent_left-parent_right-explained – 2012-09-06 12:22:27

回答

5

拉斐爾科萊解釋his answer about OpenERP Server

parent_left和parent_right是涉及 的PARENT_ID領域特殊領域。這些字段的目的是使查詢 有效地執行:使用parent_left和parent_right,您可以檢索節點的所有後代,而不使用 進行遞歸查詢。

考慮層次結構中的兩個節點A和B.例如,A和B可以是合作伙伴 類別。他們整場parent_left和 parent_right是這樣的:

B is a descendant of A in the hierarchy (defined by parent_id) 

當且僅當

A.parent_left < B.parent_left and 
    A.parent_left < B.parent_right and 
    B.parent_left < A.parent_right and 
    B.parent_right < A.parent_right 

所以,想象一下,你有六個合作夥​​伴類別如下圖所示。您可以通過遍歷樹來指定parent_left和parent_right,並且 。結果 顯示在每個節點旁邊的括號內。請注意, 的值是最優的;在實踐中,你可以在數字上留下空白。

  • 客戶(1,10)
    • 消費者(2,3)
    • 夥伴(4,9)
      • 基本夥伴(5,6)
      • 金牌合作伙伴(7, 8)
  • 供應商(11,12)

您可以使用單個SQL 查詢檢索客戶的所有子類別。請注意,值1和10是Customers的parent_left和parent_right;它們可以作爲查詢 本身的一部分進行檢索。

SELECT id FROM partner_category 
    WHERE parent_left > 1 AND parent_left < 10 

的最後一句話是,parent_left和parent_right可以在不遍歷整個層次結構進行更新 。刪除節點不需要 需要任何更改。爲了添加一個節點,你可以使用兩個UPDATE查詢修改parent_left 和parent_right:一個用於在新節點祖先的parent_left和parent_right之間「創建一些空間」 ,另一個用於移動新節點的parent_left和parent_right跟隨兄弟姐妹及其後代的 。所以parent_right和parent_right可以被有效地維護。

+1

不錯的副本從https://answers.launchpad.net/openobject-server/+question/186704 – 2012-08-09 05:06:43

+0

你能看到評論「感謝Raphael Collet(OpenERP)的好解釋。」我給了它的合適人選。在評論閱讀完整答案之前。 – user1576199 2012-08-09 05:49:06

+2

您的確需要更明確一點,而不僅僅是感謝發佈您在答案中複製的所有內容的人。我已經編輯了答案,以說明如何引用和引用其他來源的材料,以便明確信用到期的位置。該材料符合CC Attribution許可證,因此您必須非常明確地表明署名。 – 2012-08-09 15:19:26

3

這些是Nested Set Model領域。在SQL中用未綁定深度管理分層數據結構。文章Managing Hierarchical Data in MySQL用SQL中的示例解釋了這個模型的細節。

OpenERP使用嵌套集模型來管理帳戶和倉庫位置等樹木。 parent_leftparent_right列等於上述文章中的rightleft列。

+0

能詳細解釋一下嗎? – user1576199 2012-08-08 10:09:38

+0

答案中的文章鏈接具有非常明確的示例和圖表的所有細節。雖然標題說'在MySQL中',但這些信息與任何特定的SQL數據庫都沒有關係。 – 2012-08-08 10:44:19

+0

感謝穆罕默德阿里 – user1576199 2012-08-08 15:26:43