Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql] Triger na tej samej tabeli
wlamywacz
post
Post #1





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


Witam!

Tabela "categories":
  1. CREATE TABLE IF NOT EXISTS `categories` (
  2. `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `name` varchar(120) NOT NULL,
  4. PRIMARY KEY (`id`),
  5. UNIQUE KEY `id` (`id`)
  6. )

Tabela "relations":
  1. CREATE TABLE IF NOT EXISTS `relations` (
  2. `parent_id` int(11) NOT NULL,
  3. `child_id` int(11) NOT NULL,
  4. `depth` int(11) NOT NULL
  5. )

Triger:
  1. DELIMITER //
  2. CREATE TRIGGER `relation_insert` AFTER INSERT ON `relations`
  3. FOR EACH ROW BEGIN
  4.  
  5. IF NEW.depth != 0 THEN
  6. INSERT INTO relations (parent_id, child_id, depth) VALUES (NEW.child_id, NEW.child_id, 0);
  7. INSERT INTO relations (parent_id, child_id, depth)
  8. SELECT parent_id, NEW.child_id, depth + 1 FROM relations WHERE child_id = NEW.parent_id AND depth > 0;
  9. END IF;
  10.  
  11. END
  12. //
  13. 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:
  1. INSERT INTO `categories` (`name`) VALUES ('test');
  2. 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ąć.

Ten post edytował wlamywacz 28.04.2010, 14:55:58
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.12.2025 - 20:11