Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: mysql, trigger
Forum PHP.pl > Forum > Bazy danych > MySQL
abusiek
Witam!

Mam dwie tabelki:
- products - produkty (zawiera pole state, moze byc 0 - niekatywny i 1 - aktywny)
- orders_products - tabelka mowi czy bylo zamowienie na dany produkt (zawiera dwa klucze obce product_id i order_id)

Napisalem trigger, ktory przed proba usuniecia produktu sprawdza czy byl on kiedys zamawiany.
Jesli byl to nie chce go usuwac tylko zmienic mu state na 0.

mysql> delimiter |
mysql> create trigger orders_products before delete on products
-> for each row begin
-> set @n = (select product_in_order(OLD.id));
-> if(@n != 0) then
-> update products set state = 0 where id = OLD.id;
-> else
-> delete from products where id = OLD.id;
-> end if;
-> end;
-> |

Przy probie usuniecia produktu, ktory ma wpis w orders_products mysql mowi mi cos takiego:

Can't update table 'products' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

Mam rozumiec ze taka akcja, ktora sobie wymyslilem jest absolutnie nie mozliwa??

Inna sprawa jest powiedzenie mysql, zeby nie wykonywal zapytania, ktore wywolalo trigger. Nie da sie tego zrobic zwracajac FALSE z triggera, podobno mozna zrobic to spejalnie umieszczajac bledne zapytanie (ktos ma jakies doswiadczenie w tym temacie??).

Bede wdzeiczny za pomoc.
batman
Na drugie pytanie Ci nie odpowiem, ponieważ nie miałem aż takiej styczności z MySQL 5. Co do pierwszego. W MySQL nie można wywołać triggera dla tabeli, która go uruchomiła. W każdym bądź razie nie spotkałem się z taką możliwością.
abusiek
ech... szkoda... trzeba bedzie to jakos wrzucic w php-a winksmiley.jpg

wielkie dzieki za odpowiedz smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.