A ma ktos gotowe zapytania do przenoszenia poddrzewa ? Bo cos nie do konca mi dziala ten skrypt do przenoszenia galezi:
--tabela:
CREATE TABLE nested_category (
category_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
lft INT NOT NULL,
rgt INT NOT NULL
);
INSERT INTO nested_category
VALUES(1,'ELECTRONICS',1,20),(2,'TELEVISIONS',2,9),(3,'TUBE',3,4),
(4,'LCD',5,6),(5,'PLASMA',7,8),(6,'PORTABLE ELECTRONICS',10,19),
(7,'MP3 PLAYERS',11,14),(8,'FLASH',12,13),
(9,'CD PLAYERS',15,16),(10,'2 WAY RADIOS',17,18);
--skrypt do przenoszenia galezi z categori_id = 2 do category_id = 6:
LOCK TABLE nested_category WRITE;
SELECT @myLeft := lft, @myRight := rgt, @myWidth := rgt - lft + 1
FROM nested_category
WHERE category_id = 2;
SELECT @newMyRight := rgt
FROM nested_category
WHERE category_id = 6;
UPDATE nested_category
SET lft = 0-lft, rgt = 0-rgt
WHERE lft >= @myLeft AND rgt <= @myRight;
UPDATE nested_category
SET lft = lft - @myWidth
WHERE lft > @myRight;
UPDATE nested_category
SET rgt = rgt - @myWidth
WHERE rgt > @myRight;
UPDATE nested_category
SET lft = lft + @node_size
WHERE lft >= IF(@newMyRight > @myRight, @newMyRight - @myWidth, @newMyRight);
UPDATE nested_category
SET rgt = rgt + @node_size
WHERE rgt >= IF(@newMyRight > @myRight, @newMyRight - @myWidth, @newMyRight);
UPDATE nested_category
SET
lft = 0-lft+IF(@newMyRight > @myRight, @newMyRight - @myRight - 1, @newMyRight - @myRight - 1 + @myWidth),
rgt = 0-rgt+IF(@newMyRight > @myRight, @newMyRight - @myRight - 1, @newMyRight - @myRight - 1 + @myWidth)
WHERE lft <= 0-@myLeft AND rgt >= 0-@myRight;
UNLOCK TABLES;