Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Primjer trigera i automatki izračun

[es] :: MySQL :: Primjer trigera i automatki izračun

[ Pregleda: 2047 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

MarkoBalkan

Član broj: 141124
Poruke: 1624
..137.192-dsl.net.metronet.hr.



+19 Profil

icon Primjer trigera i automatki izračun09.10.2009. u 18:21 - pre 156 meseci
ako nekome treba

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  




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   




Code:

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 ;



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 ;


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.

 
Odgovor na temu

Shavgan
.NET Developer

Član broj: 169768
Poruke: 91
*.ze2.dlp446.bih.net.ba.



+1 Profil

icon Re: Primjer trigera i automatki izračun11.12.2009. u 15:36 - pre 154 meseci
Svaka ti dala!!!!
 
Odgovor na temu

[es] :: MySQL :: Primjer trigera i automatki izračun

[ Pregleda: 2047 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.