drzewo - umieszczanie nowego węzła na lewo od wskazanego węzła

0

Mam pytanie odnośnie umieszczania nowego węzła na lewo od wskazanego węzła np. z category_id = 5 - mam taki kod jak niżej, ale drzewo po wstawieniu nowego węzła psuje mi się - kod jest w języku SQL więc chyba wszystko jest jasne co i jak robię ;) Gdzie mam błąd ?

[code]
SELECT @myLeft := lft FROM nested_category WHERE category_id = 5;

UPDATE nested_category SET rgt = rgt + 2 WHERE rgt > @myLeft;
UPDATE nested_category SET lft = lft + 2 WHERE lft > @myLeft;

INSERT INTO nested_category(name, lft, rgt) VALUES('xyz', @myLeft, @myLeft + 1);
[/code]

0

Nie, no drzewo w bazie danych - przecież to jest główne zastosowanie drzew w rzeczywistych projektach, pomijając jakieś algorytmy ze studiów, które są do niczego nieprzydatne.
Czyli mamy w bazie danych tabelę nested_category z kolumnami:
category_id
name
lft
rgt

0

Nie no samo się chyba nie zrobi - lft i rgt to lewy i prawy węzeł drzew (nie można wprost dać nazw left i right bo to słowa zarezerwowane dla SQLa) - tutaj jest opis drzew: http://dev.mysql.com/tech-resources/articles/hierarchical-data.html (tylko na początku jest opis drzew przy wykorzystaniu parent_id - nieoptymalny sposób przy bardzo rozbudowanym drzewie)

0

Chyba znalazłem przyczynę - nie powinno być > tylko >= czyli zamiast

UPDATE nested_category SET lft = lft + 2 WHERE lft > @myLeft;
powinno być:
UPDATE nested_category SET lft = lft + 2 WHERE lft >= @myLeft;

1 użytkowników online, w tym zalogowanych: 0, gości: 1