Tabela "categories":
CREATE TABLE IF NOT EXISTS `categories` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, `name` varchar(120) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`) )
Tabela "relations":
CREATE TABLE IF NOT EXISTS `relations` ( `parent_id` int(11) NOT NULL, `child_id` int(11) NOT NULL, `depth` int(11) NOT NULL )
Triger:
DELIMITER // CREATE TRIGGER `relation_insert` AFTER INSERT ON `relations` FOR EACH ROW BEGIN IF NEW.depth != 0 THEN INSERT INTO relations (parent_id, child_id, depth) VALUES (NEW.child_id, NEW.child_id, 0); INSERT INTO relations (parent_id, child_id, depth) SELECT parent_id, NEW.child_id, depth + 1 FROM relations WHERE child_id = NEW.parent_id AND depth > 0; END IF; END // DELIMITER ;
Po dodaniu kategorii, tworze do niej główny węzeł w tabeli relations. Triger w założeniu ma tworzyć pozostałe węzły jednak dostaje komunikat:
Cytat
#1442 - Can't update table 'relations' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
I zapytanie:
INSERT INTO `categories` (`name`) VALUES ('test'); INSERT INTO relations (`parent_id`, `child_id`, `depth`) VALUES (4, LAST_INSERT_ID(), 1);
Parent_id = 4, gdyż znajduje się już jeden rodzic pod którego chciałem ten element podpiąć.