Joshima napisal: "@Crozin naucz się wreszcie tego, no nie trudne a może przestaniesz straszyć ludzi. / Pisałeś, że to wyjątkowo trudne a ja twierdzę, że bułka z masłem. "
Uwielbiam takich ludzi jak Joshima - mowia, ze cos jest latwe ale kodu nie podadza - jak to mowi moja babcie "g*** widzieli, g*** umieja"

Nested set z pewnością są SKOMPLIKOWANE !
grz16w więc co tam chciałeś ? przenoszenie gałęzi - więc to będzie tak:
zakładając, że mamy tabelę
nested_category z kolumnami:
category_id
name
lft
rgtKod do przenoszenia poddrzewa:
--przenoszenie poddrzewa np. z category_id = 2 i podczepienie go do np. category_id = 6:
START TRANSACTION;
--jesli przenoszone poddrzewo ma trafic na poczatek:
--SELECT @destination := (lft + 1) FROM nested_category WHERE category_id = 6;
--jesli przenoszone poddrzewo ma trafic na koniec:
SELECT @destination := rgt FROM nested_category WHERE category_id = 6;
SELECT @cat_a_width := ((rgt - lft) + 1) FROM nested_category WHERE category_id = 2;
UPDATE nested_category SET rgt = rgt + @cat_a_width WHERE rgt >= @destination;
UPDATE nested_category SET lft = lft + @cat_a_width WHERE lft >= @destination;
SELECT @cat_a_lft := lft, @cat_a_rgt := rgt FROM nested_category WHERE category_id = 2;
SELECT @diff := @destination - @cat_a_lft;
UPDATE nested_category SET rgt = rgt + @diff WHERE rgt BETWEEN @cat_a_lft AND @cat_a_rgt;
UPDATE nested_category SET lft = lft + @diff WHERE lft BETWEEN @cat_a_lft AND @cat_a_rgt;
UPDATE nested_category SET rgt = rgt - @cat_a_width WHERE rgt >= @cat_a_lft;
UPDATE nested_category SET lft = lft - @cat_a_width WHERE lft >= @cat_a_lft;
COMMIT;
Glebokosc elementow drzewa daje:
SELECT node.name, (COUNT(parent.category_id) - 1) AS depth
FROM nested_category AS node,
nested_category AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
GROUP BY node.category_id
ORDER BY node.lft;
Ale tak jak mowil Crozin - ZDECYDOWANIE daj kolumne depth i parent_id - zobaczysz ze to w wielu sytuacjach ulatwi zapytania. A i jeszcze dodam, ze sam zawsze sie waham czy uzywac nested set czy adjacency list, ale mysle ze warto wziac pod uwage, ze w wiekszosci wypadkow uzywana bywa adjacency list czyli sposob z sama kolumna parent_id i nie wplywa to w zauwazalny sposob na czas oczekiwania na wyswietlenie strony - jesli rekordow jest bardzo duzo to wowczas stosuje sie cachowanie.