Как обновить узел в Модифицированном обходе дерева предзаказа

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

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

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

Спасибо!

2 ответа

Я думаю, что лучший способ - удалить 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 и подпункт к новому местоположению:

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;

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

Другие вопросы по тегам