Pagina 1 di 1
[risolto][Mysql - phpmyadmin] Problema con trigger
Inviato: mercoledì 21 maggio 2014, 11:11
da minat09
Salve a tutti,
ho creato un trigger semplice,che aggiorna un record in caso di nuovo inserimento in un altra tabella.
Codice: Seleziona tutto
CREATE TRIGGER aggiorna
AFTER INSERT ON utente
FOR EACH ROW
BEGIN
UPDATE giorno set conto=conto-1 where id=new.utente_id;
END;$$
fin qui funziona,ora vorrei inserire un if che effettua l'operazione solo nel caso in cui il conto sia >0. Ho provato in questo ma non funziona,come posso fare?
Codice: Seleziona tutto
CREATE TRIGGER aggiorna
AFTER INSERT ON utente
FOR EACH ROW
BEGIN
if conto>0
update giorno
set conto=conto-1 where id=new.utente_id;
END if;
END;$$
Re: [Mysql - phpmyadmin] Problema con trigger
Inviato: mercoledì 21 maggio 2014, 11:22
da Bianco95
La sintassi dell'if è sbagliata:
Codice: Seleziona tutto
IF conto>0 THEN
update giorno set conto=conto-1 where id=new.utente_id;
END IF;
Penso che così funzioni...

Re: [Mysql - phpmyadmin] Problema con trigger
Inviato: mercoledì 21 maggio 2014, 11:28
da minat09
adesso provo
Re: [Mysql - phpmyadmin] Problema con trigger
Inviato: mercoledì 21 maggio 2014, 11:38
da minat09
così va, avevo già provato prima ma non mi ero accorto che dovevo cancellare il trigger precedente.
Ora però quando vado ad inserire un nuovo record nella tabella utente mi da il seguente errore:
# 1109 unknow table 'giorno' in field list
Re: [Mysql - phpmyadmin] Problema con trigger
Inviato: mercoledì 21 maggio 2014, 11:49
da Bianco95
Prova a controllare le eventuali maiuscole...
Ma secondo me l'errore è nella condizione dell'if perchè non riesce a capire cos'è conto, quindo secondo me dovresti provare così:
Codice: Seleziona tutto
CREATE TRIGGER aggiorna
AFTER INSERT ON utente
FOR EACH ROW
BEGIN
select conto into @c
from giorno
where id=new.utente_id;
IF @c>0 THEN
update giorno set conto=conto-1 where id=new.utente_id;
END IF;
END;$$
Prova così...ovviamente non so di preciso i nomi dei campi e delle tabelle

Re: [Mysql - phpmyadmin] Problema con trigger
Inviato: mercoledì 21 maggio 2014, 12:07
da minat09
Ok, adesso va. Se conto è >0 funziona e lo aggiorna.
Se però non è maggiore di 0 esegue comunque l'inserimento senza aggiornamento ma senza dare nessun errore(che prima invece dava).Cosa posso correggere?
Re: [Mysql - phpmyadmin] Problema con trigger
Inviato: mercoledì 21 maggio 2014, 12:56
da Bianco95
Non so di preciso come fare ma prova così:
Codice: Seleziona tutto
CREATE TRIGGER aggiorna
before INSERT ON utente
FOR EACH ROW
BEGIN
select conto into @c
from giorno
where id=new.utente_id;
IF @c>0 THEN
update giorno set conto=conto-1 where id=new.utente_id;
END IF;
IF @c<0 THEN
set new.utente_id=null;
END IF;
END;$$
così dovrebbe darti errore perchè utente_id è chiave e non quò essere null...(ho cambiato after insert on con before insert on)

Re: [Mysql - phpmyadmin] Problema con trigger
Inviato: mercoledì 21 maggio 2014, 13:29
da minat09
Ottimo!
Grazie 1000
Re: [risolto][Mysql - phpmyadmin] Problema con trigger
Inviato: mercoledì 21 maggio 2014, 13:46
da Bianco95
Felice di esserti stato d'aiuto!!!
