Cytat
Gratulację, nwm czym się kierowałeś, że na to wpadłeś ale juniorem można być całe życie jak się nie będzie potrafiło pisać dobrego kodu i nie będzie się patrzeć na niego szerzej niż tylko w obrębie małego fragmentu który się napisało
Kierowałem się własnymi odczuciami z rozmowy z Tobą.
Cytat
Zawsze można popełnić błąd, ale transakcje są po to, żeby jak się rekord ma nie dodać to żeby się nie dodał, a nie jak wywali błąd to żeby nagle cały system siadł.
Transakcja nie wychwyci, że dodajesz złą wartość dla lft lub rgt.
Dodawanie:
SELECT @myRight := rgt FROM nested_category
WHERE name = 'TELEVISIONS';
UPDATE nested_category SET rgt = rgt + 2 WHERE rgt > @myRight;
UPDATE nested_category SET lft = lft + 2 WHERE lft > @myRight;
INSERT INTO nested_category(name, lft, rgt) VALUES('GAME CONSOLES', @myRight + 1, @myRight + 2);
kontra
Cytat
insert into items (name, parent_id, the_order) values ('xxxx', 'x', 'x')
Usuwanie:
LOCK TABLE nested_category WRITE;
SELECT @myLeft := lft, @myRight := rgt, @myWidth := rgt - lft + 1
FROM nested_category
WHERE name = 'GAME CONSOLES';
DELETE FROM nested_category WHERE lft BETWEEN @myLeft AND @myRight;
UPDATE nested_category SET rgt = rgt - @myWidth WHERE rgt > @myRight;
UPDATE nested_category SET lft = lft - @myWidth WHERE lft > @myRight;
UNLOCK TABLES;
kontra:
delete from items where id = x
Nie znalazłem updatu, ale jest za pewne równie pokręcony, kontra zwykły:
UPDATE items
SET parent_id=value1,the_order=value2,...
WHERE id=id;
Przy stracie jednej lub dwóch dziesiątych sekundy w zapytaniu.
No co kto woli, na siłę nikomu nie wepchnę.
Jeszcze mógłbym się kłócić, jeśli bym rekursywnie tabelę generował i by to trwało łącznie 12 sekund, ale w tym przypadku? Dajcie spokój...