[risolto][Mysql - phpmyadmin] Problema con trigger

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
minat09
Prode Principiante
Messaggi: 87
Iscrizione: domenica 12 maggio 2013, 11:32

[risolto][Mysql - phpmyadmin] Problema con trigger

Messaggio 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;$$
Ultima modifica di minat09 il mercoledì 21 maggio 2014, 13:29, modificato 1 volta in totale.
Avatar utente
Bianco95
Prode Principiante
Messaggi: 31
Iscrizione: venerdì 25 aprile 2014, 21:29
Desktop: Unity
Distribuzione: Ubuntu 14.04 x86_64
Località: Susegana (Treviso)

Re: [Mysql - phpmyadmin] Problema con trigger

Messaggio 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
Work Hard Dream Big
Dopo le ere della pietra, del ferro... è giunta l'era di Linux.
minat09
Prode Principiante
Messaggi: 87
Iscrizione: domenica 12 maggio 2013, 11:32

Re: [Mysql - phpmyadmin] Problema con trigger

Messaggio da minat09 »

adesso provo
minat09
Prode Principiante
Messaggi: 87
Iscrizione: domenica 12 maggio 2013, 11:32

Re: [Mysql - phpmyadmin] Problema con trigger

Messaggio 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
Avatar utente
Bianco95
Prode Principiante
Messaggi: 31
Iscrizione: venerdì 25 aprile 2014, 21:29
Desktop: Unity
Distribuzione: Ubuntu 14.04 x86_64
Località: Susegana (Treviso)

Re: [Mysql - phpmyadmin] Problema con trigger

Messaggio 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
Work Hard Dream Big
Dopo le ere della pietra, del ferro... è giunta l'era di Linux.
minat09
Prode Principiante
Messaggi: 87
Iscrizione: domenica 12 maggio 2013, 11:32

Re: [Mysql - phpmyadmin] Problema con trigger

Messaggio 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?
Avatar utente
Bianco95
Prode Principiante
Messaggi: 31
Iscrizione: venerdì 25 aprile 2014, 21:29
Desktop: Unity
Distribuzione: Ubuntu 14.04 x86_64
Località: Susegana (Treviso)

Re: [Mysql - phpmyadmin] Problema con trigger

Messaggio 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:
Work Hard Dream Big
Dopo le ere della pietra, del ferro... è giunta l'era di Linux.
minat09
Prode Principiante
Messaggi: 87
Iscrizione: domenica 12 maggio 2013, 11:32

Re: [Mysql - phpmyadmin] Problema con trigger

Messaggio da minat09 »

Ottimo!

Grazie 1000
Avatar utente
Bianco95
Prode Principiante
Messaggi: 31
Iscrizione: venerdì 25 aprile 2014, 21:29
Desktop: Unity
Distribuzione: Ubuntu 14.04 x86_64
Località: Susegana (Treviso)

Re: [risolto][Mysql - phpmyadmin] Problema con trigger

Messaggio da Bianco95 »

Felice di esserti stato d'aiuto!!! :D :ciao:
Work Hard Dream Big
Dopo le ere della pietra, del ferro... è giunta l'era di Linux.
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti