3

现有数据(名称、lft、rgt):

Root, 1, 4
Item1, 2, 3

好像:

- Root
--- Item1

如何在 Item1 下方插入一个新节点(Item2)?我的系统当前逻辑遵循我在网上找到的大多数示例,但结果是 Item2 ABOVE Item1。

- Root
--- Item1
--- Item2

感谢您的帮助。

4

3 回答 3

4

将嵌套集模型视为一个XML文件,其中包含起始标签lftrgt结束标签所在的行:

1  <root>
2   <item1>
3   </item1>
4  </root>

要将新的子标签插入到 中root,您需要将所有后续记录向下移动:

1  <root>
2   <item1>
3   </item1>
4   <item2>
5   </item2>
6  </root>

因此,您需要计算item2.lftand item2.rgt(相应地是item2.rgt + 1and item1.rgt + 2),然后递增所有 大于 的项目和lft所有项目rgtitem1.rgt

UPDATE  mytable
SET     rgt = rgt + 2
WHERE   rgt > item1.rgt

UPDATE  mytable
SET     lft = lft + 2
WHERE   lft > item1.rgt
于 2010-02-01T14:49:51.133 回答
2

我不认为“正确答案”是正确的,你应该做的是: 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 值。

于 2012-01-11T18:41:16.573 回答
1
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 数量。但是,这个性能问题只能部分缓解,并且是嵌套集模型所固有的。出于这个原因,许多人实现了其他层次模型,例如物化路径

于 2010-02-01T14:40:42.490 回答