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... :D

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
Bianco95 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4586619#p4586619][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: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... :D
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 :D

Re: [Mysql - phpmyadmin] Problema con trigger

Inviato: mercoledì 21 maggio 2014, 12:07
da minat09
Bianco95 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4586637#p4586637][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: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 :D

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) :ciao:

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!!! :D :ciao: