[MYSQL] Problema implementazione Trigger Clicca QUI per vedere il messaggio nel forum |
ffranz |
Ciao ho un problema con questo trigger:
PHP:
CREATE TRIGGER cancella
BEFORE UPDATE ON tipo
FOR EACH ROW
BEGIN
DELETE FROM annunci WHERE tipo_annuncio = OLD.stato LIMIT 1;
DELETE FROM automobile WHERE tipo = OLD.stato LIMIT 1;
END;
Il mio obiettivo è cancellare gli annunci e le automobili quando il tipo cambia stato. Fin qui nessun problema, infatti ogni volta che tipo cambia stato il trigger esegue la sua funzione.
Il problema sta nel fatto che il tipo può assumere tre valori ATTIVO | PRENOTATO | SCADUTO. Il trigger deve eseguire la sua funzione solo quando il tipo diventa SCADUTO.
Come posso modificarlo?
Ho provato con un if, ma probabilmente sbagliavo la sintassi, potete aiutarmi?
Grazie |
gae84 |
devi andare a verificare nell'IF che lo stato cambi da un qualunque stato diverso da 'scaduto' nel valore 'scaduto'.
quindi
IF(OLD.tipo<>'scaduto' AND NEW.tipo='scaduto')
THEN
........
END IF
END |
ffranz |
Grazie gae84 ho provato ma non funziona ugualmente.
Ho settato la creazione del trigger in un file di installazione.php
PHP:
$trigger_update ='CREATE TRIGGER cancella
BEFORE UPDATE ON tipo
FOR EACH ROW
BEGIN
IF (OLD.tipo<>'scaduto' AND NEW.tipo='scaduto') THEN
DELETE FROM annunci WHERE tipo_annuncio = OLD.stato LIMIT 1;
DELETE FROM automobile WHERE tipo = OLD.stato LIMIT 1;
END IF;
END;';
Non me lo crea e mi da un errore: Unknown column 'tipo' in 'OLD'! |
gae84 |
Originally posted by ffranz
Grazie gae84 ho provato ma non funziona ugualmente.
Ho settato la creazione del trigger in un file di installazione.php
PHP:
$trigger_update ='CREATE TRIGGER cancella
BEFORE UPDATE ON tipo
FOR EACH ROW
BEGIN
IF (OLD.tipo<>'scaduto' AND NEW.tipo='scaduto') THEN
DELETE FROM annunci WHERE tipo_annuncio = OLD.stato LIMIT 1;
DELETE FROM automobile WHERE tipo = OLD.stato LIMIT 1;
END IF;
END;';
Non me lo crea e mi da un errore: Unknown column 'tipo' in 'OLD'!
mettimi l'elenco delle colonne della tabella su cui scatta il trigger |
ffranz |
TAB TIPO:
Id_tipo | telaio_tipo | stato
TAB ANNUNCI:
id_annunci | cod_venditore | telaio_auto | tipo_annuncio | tipo_annuncio | data_scad
TAB AUTOMOBILI:
Id_auto | ..... | tipo |
gae84 |
CREATE TRIGGER func
BEFORE UPDATE ON tipo
FOR EACH ROW
BEGIN
IF(OLD.stato<>'scaduto' AND NEW.stato='scaduto')
THEN
DELETE FROM annunci WHERE tipo_annuncio = OLD.stato LIMIT 1;
DELETE FROM automobile WHERE tipo = OLD.stato LIMIT 1;
END IF;
END;
penso che così sia corretto, fai sapere |
ffranz |
grazie gae ora funziona, praticamente era la mia stessa implementazione ho solo cambiato gli apici :D! |
|
|
|