.dsy:it.
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Basi di dati ~ informatica triennale (http://www.dsy.it/forum/forumdisplay.php?forumid=211)
-- [MYSQL] Problema implementazione Trigger (http://www.dsy.it/forum/showthread.php?threadid=40087)


Posted by ffranz on 24-02-2010 18:07:

[MYSQL] Problema implementazione Trigger

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


Posted by gae84 on 24-02-2010 18:27:

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


Posted by ffranz on 24-02-2010 18:40:

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'!


Posted by gae84 on 24-02-2010 18:47:

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


Posted by ffranz on 24-02-2010 19:02:

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


Posted by gae84 on 24-02-2010 19:27:

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


Posted by ffranz on 24-02-2010 19:39:

grazie gae ora funziona, praticamente era la mia stessa implementazione ho solo cambiato gli apici :D!


All times are GMT. The time now is 08:27.
Show all 7 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.