现有数据(名称、lft、rgt):
Root, 1, 4
Item1, 2, 3
好像:
- Root
--- Item1
如何在 Item1 下方插入一个新节点(Item2)?我的系统当前逻辑遵循我在网上找到的大多数示例,但结果是 Item2 ABOVE Item1。
- Root
--- Item1
--- Item2
感谢您的帮助。
现有数据(名称、lft、rgt):
Root, 1, 4
Item1, 2, 3
好像:
- Root
--- Item1
如何在 Item1 下方插入一个新节点(Item2)?我的系统当前逻辑遵循我在网上找到的大多数示例,但结果是 Item2 ABOVE Item1。
- Root
--- Item1
--- Item2
感谢您的帮助。
将嵌套集模型视为一个XML
文件,其中包含起始标签lft
和rgt
结束标签所在的行:
1 <root>
2 <item1>
3 </item1>
4 </root>
要将新的子标签插入到 中root
,您需要将所有后续记录向下移动:
1 <root>
2 <item1>
3 </item1>
4 <item2>
5 </item2>
6 </root>
因此,您需要计算item2.lft
and item2.rgt
(相应地是item2.rgt + 1
and item1.rgt + 2
),然后递增所有 大于 的项目和lft
所有项目:rgt
item1.rgt
UPDATE mytable
SET rgt = rgt + 2
WHERE rgt > item1.rgt
UPDATE mytable
SET lft = lft + 2
WHERE lft > item1.rgt
我不认为“正确答案”是正确的,你应该做的是: set item2.lft = root.rgt (4) set item2.rgt = root.rgt + 1 (5)
UPDATE mytable SET rgt = rgt + 2 WHERE rgt >= root.rgt root.rgt 现在是 6;
UPDATE mytable SET lft = lft + 2 WHERE lft > root.rgt root.lft 保持不变 (1),但您有多个根,它们将得到更新。
您不能使用对等条目来确定 lft 和 rgt 值。
Root, 1, 6
Item1, 2, 3
Item2, 4, 5
和 use ORDER BY ItemName
,但当然这只适用于给定的一组兄弟姐妹。
有关如何插入,请参阅此处的第 5 个查询:http: //intelligent-enterprise.informationweek.com/001020/celko.jhtml;jsessionid= OOU0L1TIM1IB1QE1GHPSKH4ATMY32JVN
有些人在他们的数字之间设置间隔,以尽量减少UPDATE
必须完成的 s 数量。但是,这个性能问题只能部分缓解,并且是嵌套集模型所固有的。出于这个原因,许多人实现了其他层次模型,例如物化路径。