kreiramo prvu tablicu Proizvod
Code:
CREATE TABLE `proizvod` (
`ID` int(11) DEFAULT NULL,
`Proizvod` varchar(40) DEFAULT NULL,
`Opis` varchar(100) DEFAULT NULL,
`Cijena` double(20,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `proizvod` (
`ID` int(11) DEFAULT NULL,
`Proizvod` varchar(40) DEFAULT NULL,
`Opis` varchar(100) DEFAULT NULL,
`Cijena` double(20,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Code:
CREATE TABLE `racun` (
`ID` int(11) DEFAULT NULL,
`ID_Proizvod` int(11) DEFAULT NULL,
`Kolicina` double(30,5) DEFAULT NULL,
`Ukupno` double(30,5) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `racun` (
`ID` int(11) DEFAULT NULL,
`ID_Proizvod` int(11) DEFAULT NULL,
`Kolicina` double(30,5) DEFAULT NULL,
`Ukupno` double(30,5) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Code:
CREATE TABLE `po_racunu` (
`ID` int(11) DEFAULT NULL,
`Ukupno` double(20,5) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `po_racunu` (
`ID` int(11) DEFAULT NULL,
`Ukupno` double(20,5) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Code:
DELIMITER $$
DROP TRIGGER /*!50032 IF EXISTS */ `marko`.`racun-ukupno`$$
CREATE
/*!50017 DEFINER = 'root'@'localhost' */
TRIGGER `racun-ukupno` BEFORE INSERT ON `racun`
FOR EACH ROW BEGIN
set New.Ukupno=new.kolicina*(select cijena from proizvod where proizvod.ID=NEW.ID_Proizvod);
END;
$$
DELIMITER ;
DELIMITER $$
DROP TRIGGER /*!50032 IF EXISTS */ `marko`.`racun-ukupno`$$
CREATE
/*!50017 DEFINER = 'root'@'localhost' */
TRIGGER `racun-ukupno` BEFORE INSERT ON `racun`
FOR EACH ROW BEGIN
set New.Ukupno=new.kolicina*(select cijena from proizvod where proizvod.ID=NEW.ID_Proizvod);
END;
$$
DELIMITER ;
Code:
DELIMITER $$
DROP TRIGGER /*!50032 IF EXISTS */ `marko`.`po-racunu`$$
CREATE
/*!50017 DEFINER = 'root'@'localhost' */
TRIGGER `po-racunu` AFTER INSERT ON `racun`
FOR EACH ROW BEGIN
declare i int;
select count(*) into i from racun where racun.ID=NEW.ID;
if (i=1) then
insert into po_racunu(ID,Ukupno) values(NEW.ID,0);
update po_racunu set Ukupno=Ukupno+new.Ukupno where ID=NEW.ID;
else
update po_racunu set Ukupno=Ukupno+new.Ukupno where ID=NEW.ID;
end if;
END;
$$
DELIMITER ;
DELIMITER $$
DROP TRIGGER /*!50032 IF EXISTS */ `marko`.`po-racunu`$$
CREATE
/*!50017 DEFINER = 'root'@'localhost' */
TRIGGER `po-racunu` AFTER INSERT ON `racun`
FOR EACH ROW BEGIN
declare i int;
select count(*) into i from racun where racun.ID=NEW.ID;
if (i=1) then
insert into po_racunu(ID,Ukupno) values(NEW.ID,0);
update po_racunu set Ukupno=Ukupno+new.Ukupno where ID=NEW.ID;
else
update po_racunu set Ukupno=Ukupno+new.Ukupno where ID=NEW.ID;
end if;
END;
$$
DELIMITER ;
tablica proizvod sadrži podatke o proizvodima.
tablica racun, podatke o racunima s time da se ukupno popunjava na prvi triger (racun ukupno).
a tablica po racunu popunjava se na drugi triger(po-racunu) - ukupna cifra po racunu.
ovo je samo mali primjer.
mislim da je prvi triger jasan.
objašnjenje drugog.
kad kreiramo račun i za neki unosimo proizvode prvo sa count provjerimo dali postoji racun.
ako unosimo tek prvi proizvod za neki račun, select će vratiti 1.
nakon toga insertira taj ID i 0 za ukupno tako da može zbrajati kasnije, da umjesto 0 piše null ništa s ene bi dogodilo.
i nakon toga vršimo updat eukupno.
nakon drugog unosa proizvoda za isti račun, count vraća 2 i samo će update-ti Ukupno.
nadam sam da sam pomogao.
u tablicu račun se upisuje sve osim Ukupno.
a po računu se upisuje i ažurira automatski.