Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Didattica > Corsi A - F > Basi di dati ~ informatica triennale
 
[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!

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate