openerp中的左父级和右父级

openerp中的左父级和右父级,openerp,Openerp,什么是左家长和右家长 在Openerp中它是如何工作的 谢谢这些是的字段。在SQL中管理具有未绑定深度的分层数据结构。本文用SQL中的示例详细解释了该模型 OpenERP使用嵌套集模型来管理诸如科目表和仓库位置之类的树parent\u left和parent\u right列相当于上述文章中的right和left列。正如拉斐尔·科莱在: parent_left和parent_right是与相关的特殊字段 父项id字段。这些字段的用途是进行查询 在层次结构中高效地执行:父级_向左和向右 对,您可以

什么是左家长和右家长

在Openerp中它是如何工作的

谢谢

这些是的字段。在SQL中管理具有未绑定深度的分层数据结构。本文用SQL中的示例详细解释了该模型


OpenERP使用嵌套集模型来管理诸如科目表和仓库位置之类的树
parent\u left
parent\u right
列相当于上述文章中的
right
left
列。

正如拉斐尔·科莱在:

parent_left和parent_right是与相关的特殊字段 父项id字段。这些字段的用途是进行查询 在层次结构中高效地执行:父级_向左和向右 对,您可以检索节点的所有子代,而无需 进行递归查询

考虑层次结构中的两个节点A和B。A和B可以是搭档 例如,类别。它们的整数字段左和右 父母权利包括:

    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
A.parent\u left
所以,假设你有六个合作伙伴类别,如下所示。你可以 通过遍历树,将父_分配给左侧,将父_分配给右侧。结果 在每个节点旁边的括号中显示。请注意,此处的值 是最优的;实际上,你可以在数字上留下空白

  • 客户(1、10)
    • 消费者(2,3)
    • 合作伙伴(4、9)
      • 基本合作伙伴(5、6)
      • 黄金合伙人(7,8)
  • 供应商(11、12)
您可以使用单个SQL检索客户的所有子类别 查询请注意,值1和10是左和右的父项 客户的母权;它们可以作为查询的一部分进行检索 本身

    SELECT id FROM partner_category
    WHERE parent_left > 1 AND parent_left < 10
从合作伙伴类别中选择id
其中,左父项>1,左父项<10
最后一点是,可以更新parent_left和parent_right 不需要遍历整个层次结构。删除节点不会导致错误 需要任何改变。要添加节点,可以调整左侧的父节点 还有两个更新查询:一个是“留出一些空间” 在新节点祖先的左父节点和右父节点之间, 一个用于将新节点的父节点左移和父节点右移 跟随兄弟姐妹和他们的后代。所以你离开了 可以有效地维护家长权


答案中的文章链接包含所有细节,并附有非常清晰的示例和图表。虽然标题上写着“在MySQL中”,但这些信息与任何特定的SQL数据库都没有关系。你能看到这样的评论吗“感谢Raphael Collet(OpenERP)的出色解释。”我认为这是对的。在发表评论之前,请阅读完整的答案。你确实需要更明确一点,而不仅仅是感谢在你的答案中发布你复制的所有内容的人。我对答案进行了编辑,以说明您应该如何引用来自其他来源的材料,以便清楚地知道应该在哪里获得信贷。那里的材料是在抄送署名许可下的,所以你必须明确署名。感谢你的评论Brad Larson。我会在将来记住这些事情。请参考下面给出的链接,因为它有一个关于左家长和右家长的很好的解释