什么是父左和父右?
它是如何运作的Openerp?
Thanks
正如拉斐尔·科莱 (Raphael Collet) 所解释的那样他关于 OpenERP Server 的回答 https://answers.launchpad.net/openobject-server/+question/186704:
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。结果
显示在每个节点旁边的括号中。请注意那里的值
是最优的;实际上,您可以在数字中留出间隙。
- Customers (1, 10)
- 消费者 (2, 3)
- Partners (4, 9)
- 基本伙伴 (5, 6)
- 黄金合作伙伴 (7, 8)
- 供应商 (11, 12)
您可以使用单个 SQL 检索 Customers 的所有子类别
询问。请注意,值 1 和 10 是parent_left 和
客户的家长权利;它们可以作为查询的一部分被检索
本身。
SELECT id FROM partner_category
WHERE parent_left > 1 AND parent_left < 10
最后备注的是parent_left和parent_right可以更新
无需遍历整个层次结构。删除节点不会
需要任何改变。要添加节点,您可以调整parent_left
和parent_right有两个更新查询:一个是“腾出一些空间”
在新节点祖先的parent_left和parent_right之间,
一个用于移动新节点的parent_left和parent_right
跟随兄弟姐妹及其后代。所以parent_left和
可以有效地维护parent_right。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)