Думайте о модели вложенных множеств как о файле XML
, где lft
и rgt
- это строки, в которых находятся начальный и конечный теги:
1 <root>
2 <item1>
3 </item1>
4 </root>
Чтобы вставить новый вложенный тег в root
, вам нужно сдвинуть вниз все последующие записи:
1 <root>
2 <item1>
3 </item1>
4 <item2>
5 </item2>
6 </root>
Таким образом, вам нужно вычислить item2.lft
и item2.rgt
(которые являются item2.rgt + 1
и item1.rgt + 2
, соответственно), а затем увеличить all lft
и rgt
из всех предметов, превышающих item1.rgt
:
UPDATE mytable
SET rgt = rgt + 2
WHERE rgt > item1.rgt
UPDATE mytable
SET lft = lft + 2
WHERE lft > item1.rgt