The parent_left and parent_right on OpenERP

parent_left parent_right parent_id字段都涉及到特殊领域。这些字段的目的是让在层次结构中的查询,有效地执行:与parent_left parent_right,您可以检索所有后代节点而不做递归查询。

考虑两个节点层次结构中的A和B。 A和B可以是合作伙伴的类别,例如。他们的的整数字段parent_left parent_right是这样的:

        B是一个层次结构中的A后裔(由PARENT_ID定义)

当且仅当

        A.parent_left<B.parent_left,B.parent_right B.parent_left 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是parent_left和parent_right顾客,它们可以检索查询本身的一部分。

        SELECT ID从partner_category的
        WHERE parent_left>1 parent_left<10

最后一句话是可以更新parent_left parent_right,,无需遍历整个层次。移除一个节点,不需要任何改变。为了增加一个节点,你可以适应parent_left和parent_right2 UPDATE查询:1,以“使一些空间”之间的parent_left和parent_right节点的长辈,和一个以转移了所有的节点“在正确的parent_left parent_right “新的位置。所以parent_left parent_right可以有效地保持。

原文地址:https://www.cnblogs.com/alangwansui/p/3040227.html