|
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. | NEI PREFERITI | .:: | RSS Forum | RSS News | NEWS web | NEWS software | |
| PUBBLICITA' | | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | | CERCA nel FORUM » | |
20-10-2008, 11.32.23 | #1 | |
Gold Member
Registrato: 21-09-2002
Messaggi: 2.281
|
[MYSQL] perkè questo codice non funziona?
DELIMITER // create trigger videoteca.aggiusta_quantita after delete on noleggio for each row BEGIN UPDATE dvd IF quantita < 5 THEN SET quantita=quantita+1 where id_dvd = old.dvd_noleggiato END IF; END;// DELIMITER; Qualche idea? L'errore che MySQL Query Browser mi restituisce è : Quota:
Ultima modifica di Poseidon : 20-10-2008 alle ore 11.41.20 |
|
20-10-2008, 13.33.27 | #2 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
|
Manca il ; alla fine di questa riga
IF quantita < 5 THEN SET quantita=quantita+1 where id_dvd = old.dvd_noleggiato |
20-10-2008, 17.19.55 | #3 |
Gold Member
Registrato: 21-09-2002
Messaggi: 2.281
|
umm corretto, ma MySQL Query Browser continua a darmi errore in linea 6.
DELIMITER // create trigger videoteca.aggiusta_quantita after delete on noleggio for each row BEGIN UPDATE dvd IF quantita < 5 THEN SET quantita=quantita+1 where id_dvd = old.dvd_noleggiato; END IF; END;// DELIMITER; |
23-10-2008, 12.44.11 | #4 |
Gold Member
Registrato: 21-09-2002
Messaggi: 2.281
|
Cambiando trigger, ma rimanendo in tema:
DELIMITER $$ create trigger consentiNoleggioSe before insert on noleggio for each row BEGIN IF dvd.quantita in (select quantita from dvd join noleggio on dvd.id_dvd = new.dvd_noleggiato where quantita between 1 and 5) THEN insert into noleggio(id_nol, id_cliente, dvd_noleggiato, inizio, DataRestEff, prezzo) values(new.id_nol, new.id_cliente, new.dvd_noleggiato, new.inizio, new.DataRestEff, new.prezzo); END IF; END; $$ DELIMITER; L'idea è di consentire un noleggio solo se la quantità copie di dvd disponibili relativi a 1 particolare dvd, caratterizzato da un suo id, è maggiore di 0 e minore di 5. Il codice mi viene accettato da MySQL Query Browser, ma se tento poi di inserire un noleggio nella tabellanoleggi mi dice: Unknown column 'quantita' in IN/ALL/ANY subquery ERRORE N° 1054 E non capisco perkè, dato che "quantita" è effettivamente un attributo della tabella DVD. |
24-10-2008, 09.16.50 | #5 |
Gold Member
Registrato: 21-09-2002
Messaggi: 2.281
|
nessuno che mi sappia aiutare?
|
24-10-2008, 11.30.28 | #6 |
Gold Member
Registrato: 21-09-2002
Messaggi: 2.281
|
ho provato anche così, ma non funziona. Vi prego ne sto uscendo pazzo ...
DELIMITER // create trigger consentiNol before insert on noleggio for each row BEGIN if dvd.quantita in (select distinct quantita from dvd join noleggio on dvd.id_dvd = dvd_noleggiato where quantita between 1 and 5) then insert into noleggio(id_nol, tipo, id_cliente, dvd_noleggiato, inizio, DataRestEff, prezzo) values(new.id_nol, new.tipo, new.id_cliente, new.dvd_noleggiato, new.inizio, new.DataRestEff, new.prezzo); end if; END// DELIMITER; ---> errore: Unknown table 'dvd' in IN/ALL/ANY subquery >.< MySQL non riconosce le clausole check implementate nelle tabelle, ma nemmeno coi trigger si può rendere tale vincolo? come diamine faccio? sn disperato: "un noleggio non può essere inserito se la quantità di copie dvd diponibili è = 0" CREATE TABLE `videoteca`.`dvd` ( `id_dvd` int(10) NOT NULL auto_increment, `data_fabb` date NOT NULL, `id_film` int(10) NOT NULL, `quantita` tinyint(1) default '5', PRIMARY KEY (`id_dvd`), UNIQUE KEY `FK_dvd_1` USING BTREE (`id_film`), CONSTRAINT `FK_dvd_1` FOREIGN KEY (`id_film`) REFERENCES `film` (`id_film`) CONSTRAINT `chk_quantita` CHECK (quantita between 0 and 5); **** viene ignorata da MySQL **** ); CREATE TABLE `videoteca`.`film` ( `id_film` int(10) NOT NULL auto_increment, `titolo` varchar(50) default NULL, `anno` year(4) default NULL, `regista` int(11) default NULL, PRIMARY KEY (`id_film`), KEY `FK_film_1` (`regista`), CONSTRAINT `FK_film_1` FOREIGN KEY (`regista`) REFERENCES `attoreregista` (`id_AttReg`) ); Ultima modifica di Poseidon : 24-10-2008 alle ore 11.39.16 |
03-11-2008, 03.44.12 | #7 |
Newbie
Registrato: 27-07-2008
Messaggi: 19
|
Prova
IF quantita < '5' THEN SET quantita = quantita + 1 where id_dvd = old.dvd_noleggiato Credi posso andare x cio che devi fare tu? IF ((quantita < 5) and (id_dvd = old.dvd_noleggiato)) THEN SET quantita=quantita+1 Magari funzia Ultima modifica di xaras2 : 03-11-2008 alle ore 03.51.17 |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
Discussioni simili | ||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
Teoria dei giochi: aiutatemi a risolvere questo problema! | Pistol-pete | Chiacchiere in libertà | 10 | 30-06-2007 00.20.39 |
[javascript] memorizzare selezioni di un campo select di un modulo | bietolino | Programmazione | 4 | 14-05-2007 12.05.02 |
Genuine intel (R) CPU T2060 @ 1.60GHz? | smithcome | Hardware e Overclock | 68 | 08-03-2007 19.33.02 |
Funziona troppo bene!!! | aspide | Software applicativo | 7 | 31-08-2004 13.06.39 |
Parenti... | Skorpios | Chiacchiere in libertà | 77 | 09-03-2004 16.02.22 |