This translates to MySQL, tested on 4.0.18:
SELECT @right_most_sibling := rgt
FROM Personnel
WHERE emp = ? /* :your_boss */;
UPDATE Personnel
SET lft = IF(lft > @right_most_sibling, lft + 2, lft),
rgt = IF(rgt >= @right_most_sibling, rgt + 2, rgt)
WHERE rgt >= @right_most_sibling;
INSERT INTO Personnel (emp, lft, rgt)
VALUES ('New Guy', @right_most_sibling, @right_most_sibling + 1);
I don't know what version of MySQL introduced the @var := doohickey. Be warned that inserts etc. into a nested-set must touch all nodes to the right of the parent. That shouldn't be a problem if the tree is small or updated infrequently. A smarty might be able to devise a method to mitigate the change, but I'm not so smart, I plan to brute force a solution one of these days. :-) This nested-set thread has piqued my interest in the subject. |