- Home
- Categorie
- Coding e Sistemistica
- PHP
- Aiuto:Trigger!!!!!!!!!!!!!!!
-
Aiuto:Trigger!!!!!!!!!!!!!!!
Ho l'esigenza di usare i trigger per mantenere i dati del database consistenti! Ho una tabella Giocatori che all'evento update del campo Goal deve "scatenare" un trigger per aggioranre la tabella Classifica e la tabella Partita.Per aggiornare queste altre tabelle dovrei sapere i campi del Giocatore che sto aggiornando perchè in Classifica devo aumentare di uno i goal della squadra del giocatore che ha segnato e la stessa cosa vale per l'altra tabella!
Potreste essermi di aiuto? ooo:o xx:x
Vi ringrazio anticipatamente per le risposte
-
Difficile risponderti senza sapere il nome dei campi delle tabelle.
Comunque ho provato a crearti un trigger che dovrebbe risolvere il tuo problema:CREATE TRIGGER Change_On_Goal AFTER UPDATE OF Goal ON Giocatori FOR EACH ROW BEGIN UPDATE Classifica SET NumGoal = NumGoal + 1 WHERE Giocatori.Nome = NEW.Nome; UPDATE Partita SET NumGoal = NumGoal + 1 WHERE Giocatori.Nome = NEW.Nome; END; ```Ciao!
-
Intanto ti volevo ringraziare per la risposta!!!
Allora l'idea era questa:CREATE TRIGGER gestione_goal
AFTER UPDATE OF Goal ON Giocatori
FOR EACH ROW
BEGIN
UPDATE Classifica
SET
Goal_Fatti = Goal_Fatti + 1
WHERE
Nomesq = Giocatori.Squadra;UPDATE Partita
SET
Goal_Sq1 = Goal_Sq1 + 1
WHERE
Sq1 = Giocatori.Squadra;UPDATE Partita
SET
Goal_Sq2 = Goal_Sq2 + 1
WHERE
Sq2 = Giocatori.Squadra;
END;Sq1 e Sq2 sono i nomi delle squadre nella tabella Partita mentre Nomesq è della tabella Classifica! Il problema è che nn va! in phpmyadmin quando eseguo questo codice mi dice:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OF Goal ON Giocatori
FOR EACH ROW
BEGIN
UPDATE Classifica
SET
Goal_Fatti =' at line 2Grazie per l'aiuto!!! xxxx
-
Ho fatto quest'altra prova:
CREATE TRIGGER gestione_goal
AFTER UPDATE ON Giocatori
FOR EACH ROW
BEGIN
UPDATE Classifica
SET
Goal_Fatti = Goal_Fatti + 1
WHERE
Nomesq = Giocatori.Squadra AND Giocatori.Cognome = NEW.Cognome;UPDATE Partita
SET
Goal_Sq1 = Goal_Sq1 + 1
WHERE
Sq1 = Giocatori.Squadra AND Giocatori.Cognome = NEW.Cognome;
SET
Goal_Sq2 = Goal_Sq2 + 1
WHERE
Sq2 = Giocatori.Squadra AND Giocatori.Cognome = NEW.Cognome;
END;
ora l'errore che mi da è :#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 9
-
Ho fatto due prove mettendo al posto di After ho messo Before oppure al posto di new ho messo old! Ma niente stesso errore!
-
Prova in questo modo:
CREATE TRIGGER gestione_goal AFTER UPDATE ON Giocatori FOR EACH ROW BEGIN UPDATE Classifica SET Goal_Fatti = Goal_Fatti + 1 WHERE Nomesq = NEW.Squadra; UPDATE Partita SET Goal_Sq1 = Goal_Sq1 + 1 WHERE Sq1 = NEW.Squadra; UPDATE Partita SET Goal_Sq2 = Goal_Sq2 + 1 WHERE Sq2 = NEW.Squadra; END;
-
Io questo codice che mi hai dato nn l'ho ancora provato! Ma ci sono due problemi di fondo! Ora ti dico meglio quello che vorrei creare perchè ti chiedo scusa ma forse nn sono stato molto chiaro! Con il php quando segna un giocatore vorrei che oltre alla tabella giocatori si modificassero anche la Tabella Classifica e Partita! Ma solo quando aggiorno il goal di giocatori! Giocatori potrei aggiornarlo anche per ammonizioni, espulsioni e nn voglio che in quel caso mi faccia un aumento di goal! Inoltre nn ho capito bene perchè hai messo New. squadra! Pensi che l'errore sia nel fatto che nn riconosca il campo squadra perchè è stato aggiornato il giocatore? Cmq la cosa che mi preme di + p il fatto che le modifiche alle altre tabelle devono esserci solo se viene segnato un goal e nn per altri casi! Ti ringrazio tanto per il tuo aiuto e spero insieme di risolvere il problema!
-
Altre idee??? Sups e gli altri nn mi abbandonate!!!
-
Prova in questo modo, se non funziona, postami il nome dei capi più significativi che entrano in gioco nella modifica delle tre tabelle.
CREATE TRIGGER gestione_goal AFTER UPDATE OF NumeroGoal ON Giocatori FOR EACH ROW BEGIN IF(OLD.NumeroGoal <> NEW.NumeroGoal) UPDATE Classifica SET Goal_Fatti = Goal_Fatti + 1 WHERE Nomesq = OLD.Squadra; UPDATE Partita SET Goal_Sq1 = Goal_Sq1 + 1 WHERE Sq1 = OLD.Squadra; UPDATE Partita SET Goal_Sq2 = Goal_Sq2 + 1 WHERE Sq2 = OLD.Squadra; END IF; END;
-
Ho scritto due volte lo stesso messaggio!
-
Sups se metto il codice come mi hai scritto mi da problemi alla riga 2 dove c'è OF Goal ON Giocatori! Se invece metto solo On mi da errore alla riga 6!
Cmq la tabella Giocatori è cosi:
Gid
Nome``Cognome``Ruolo``Squadra``Goal``Ammonizioni
Espulsioni
La tabella Classifica è :
Nomesq``Serie``Anno``Punti``V``P``S``Goal_Fatti
!mentre Partita è:
'StadioData
Sq1Goal_sq1
Goal_sq2%Posspalla A
%PosspallaBCannoniere
CartelliniA``Cartellin iB`Nn so se la struttura delle tabelle ti possa essere d'aiuto!
-
Prova a modificarlo in questo modo:
CREATE TRIGGER gestione_goal AFTER UPDATE ON Giocatori FOR EACH ROW BEGIN IF(OLD.NumeroGoal <> NEW.NumeroGoal) UPDATE Classifica SET Goal_Fatti = Goal_Fatti + 1 WHERE Nomesq = NEW.Squadra; UPDATE Partita SET Goal_Sq1 = Goal_Sq1 + 1 WHERE Sq1 = NEW.Squadra; UPDATE Partita SET Goal_Sq2 = Goal_Sq2 + 1 WHERE Sq2 = NEW.Squadra; END IF; END;
Comunque, Nomesq e Squadra, Sq1 e Squadra, Sq2 e Squadra, devono essere dello stesso tipo, es. tipo di dato varchar.
Se ti da nuovamente errore riportalo nel post.
-
Mi da sempre errore alla sesta riga!
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE Classifica SET Goal_Fatti = Goal_Fatti + 1 WHERE Nomesq = NEW.Squadra' at line 6
Sups nn possiamo trovare un modo per parlarci + velocemente? Magari una chat? Perchè anchio sto facendo delle prove ma nn riesco proprio a capire perchè da questi errori! poichè devo consegnare il progetto mi servirebbe una mano abbastanza velocemente! invece cosi riusciamo a parlarci al max 2 volte al giorno! Fammi sapere
-
Sono tutte varchar(20) e in Parita le chiave primaria è composta da Data,Sq1,Sq2 mentre in Classifica da Nomesq,Serie,Anno in Giocatori la chiave è solo il Gid! Poi ho fatto due prove
Ho tolto l'IF e lasciato solo un Update ma niente sempre errore a quella riga! Poi ho provato a togliere le update e metterci una select dentro l'if ma niente lo stesso! Bhol....
-
C'è la fai a creare ed a postare il dump file del database.
Il comando da digitare è questo:mysqldump nome_dp > nome_file.sql
Così posso avere una copia per effettuare i test.
-
Sump se ti do il file zip con il database esportato per te va bene?
Fammi sapere
Grazie
-
Si, va bene se mandi il zip file del dump del DB.
-
Sups come te lo mando? Ti ho mandato il mio msn scrivendoti che è .com nn .it!
Ti è arrivato? Fammi sapere! io sono qui che sto vedendo!
-
Devi andare in "Modalità avanzata" e scorrendo c'è una voce "Allegati", li devi inserire il file.
Io il tuo indirizzo l'ho messo in lista.
-
il file è 338 kbyte e supera il limite! Mi hai messo in lista che vuol dire? mi hai aggiunto tra i contatti di msn?