如何在Modified Preorder Tree Traversal中更新节点

时间:2011-11-29 06:47:07

标签: sql algorithm mptt

我正在使用MPTT存储层次结构。添加和删​​除的概念在此Modified Preorder Tree Traversal链接中得到了很好的解释。

我们如何在Modified preorder树遍历中更新与其关联的特定节点及其树? 例如: - 如果我想在TLC下移动TLA及其层次结构。使用sql脚本我们该怎么做?

enter image description here

任何帮助表示感谢。

谢谢!

3 个答案:

答案 0 :(得分:0)

基于该链接 - 看起来您通过获取给定的根节点来更新树,并更新左侧值大于该根节点的左侧值且右侧值小于右侧值的所有节点那个根节点。看起来非常简单。这有帮助吗?

答案 1 :(得分:0)

我认为最好的方法是删除TLA及其层次结构,然后递归地将它们附加到TLC。它需要几个SQL语句来实现它。

答案 2 :(得分:0)

在技术支持点之后移动TLA点:

@TlaLeft = 2
@TlaRight = 7
@TechSupportRight = 18

TLA新位置点之后的第一次更新:

UPDATE Tree SET lft = lft + @TlaRight - @TlaLeft +1,rgt = rgt + @TlaRight - @TlaLeft +1  WHERE rgt > @TechSupportRight;

第二次更新TLA,并将子点指向新位置:

UPDATE Tree SET lft = @TechSupportRight - @TlaLeft + lft+1 ,rgt = @TechSupportRight - @TlaRight + rgt+1  WHERE lft >= @TlaLeft and  rgt <= @TlaRight;

TLA旧位置后的第三次更新:

UPDATE Tree SET lft = lft - (@TlaRight - @TlaLeft ) - 1 WHERE lft > @TlaLeft ;
UPDATE Tree SET rgt = rgt - (@TlaRight - @TlaLeft ) - 1 WHERE rgt > @TlaRight;