我正在使用 MPTT 存储层次结构。添加和删除的概念在这个Modified Preorder Tree Traversal链接中得到了很好的解释。
我们如何在 Modified preorder tree traversal 中更新特定节点及其关联的树?例如:- 如果我想在 TLC 下移动 TLA 及其层次结构。使用 sql 脚本我们怎么能做到这一点?
任何帮助表示赞赏。
谢谢!
我正在使用 MPTT 存储层次结构。添加和删除的概念在这个Modified Preorder Tree Traversal链接中得到了很好的解释。
我们如何在 Modified preorder tree traversal 中更新特定节点及其关联的树?例如:- 如果我想在 TLC 下移动 TLA 及其层次结构。使用 sql 脚本我们怎么能做到这一点?
任何帮助表示赞赏。
谢谢!
基于该链接-看起来您通过获取给定的根节点来更新树,并更新左值大于该根节点的左值且右值小于该根节点的右值的所有节点节点。看起来很简单。这有帮助吗?
我认为最好的方法是删除 TLA 及其层次结构,然后将它们递归地附加到 TLC。它需要几个 SQL 语句来实现。
在技术支持点之后移动 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 和 sub 指向新位置:
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;