Как обновить узел в Модифицированном обходе дерева предзаказа - PullRequest
0 голосов
/ 29 ноября 2011

Я использую MPTT для хранения иерархий. Концепция добавления и удаления хорошо объяснена в этой Модифицированной обходной линии дерева предзаказов .

Как мы обновляем конкретный узел и связанное с ним дерево в Модифицированном обходе дерева предзаказа? Например: - Если я хочу переместить TLA и его иерархию под TLC. Используя скрипт SQL, как мы можем это сделать?

enter image description here

Любая помощь приветствуется.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 27 апреля 2016

Я думаю, что лучший способ - удалить TLA и его иерархию, а затем рекурсивно добавить их в TLC. Для этого требуется несколько операторов SQL.

0 голосов
/ 29 января 2019

переместить точку 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;
0 голосов
/ 29 ноября 2011

На основе этой ссылки - похоже, что вы обновляете дерево, беря заданный корневой узел и обновляя все узлы, у которых и левое значение больше, чем левое значение этого корневого узла, и правое значение меньше, чем правое значениеэтого корневого узла.Кажется довольно просто.Это помогает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...