Pole w bazie jako iloczyn 2 pól.

0

Witam.
Chcę aby pole X w mojej bazie było automatycznie obliczane na podstawie iloczynu pola Y i Z. Pole Y znajduje się w tej samej bazie co pole X a pole Z jest polem innej tabeli.
Wie ktoś jak obliczać to pole automatycznie po dodaniu rekordu?

Pozdrawiam :)

1

--> trigger

1

Jeżeli wersja > 5.6 to możesz użyc kolumny wiliczanej:
https://dev.mysql.com/doc/refman/5.7/en/create-table.html#create-table-generated-columns

0

Niestety wersja 5.5.
Użyłem triggera, ale mam z nim problem.
Chcę policzyć Sumę zamówienia, ale cena produktu jest w innej tabeli, a w tabeli w której tę sumę chcę policzyć jest ilość kupionych sztuk.

Zrobiłem coś takiego, ale nie działa:

CREATE TRIGGER Trigger_UzupelnijSumeZamowienia
BEFORE INSERT ON Zamowienia
FOR EACH ROW BEGIN
SET @suma = SELECT CenaZaLitr FROM RodzajePaliw WHERE IdPaliwa = new.RodzajPaliwa
SET NEW.SumaZamowienia = suma

END

Jeszcze te sumę trzeba by przemnożyć przez ilość zakupionych litrów czyli new.ZakupionychLitrow.

Ma ktoś pomysł jak to zmajstrować?

Pozdrawiam.

1
CREATE TRIGGER `Trigger_UzupelnijSumeZamowienia` BEFORE INSERT ON `Zamowienia` FOR EACH ROW BEGIN
BEGIN
SET @suma =  (SELECT RodzajePaliw.CenaZaLitr FROM RodzajePaliw WHERE RodzajePaliw.IdPaliwa = new.RodzajPaliwa);
SET NEW.SumaZamowienia = @suma * new.ZakupionychLitrow;
END
0
hipekk napisał(a):
CREATE TRIGGER `Trigger_UzupelnijSumeZamowienia` BEFORE INSERT ON `Zamowienia` FOR EACH ROW BEGIN
BEGIN
SET @suma =  (SELECT RodzajePaliw.CenaZaLitr FROM RodzajePaliw WHERE RodzajePaliw.IdPaliwa = new.RodzajPaliwa);
SET NEW.SumaZamowienia = @suma * new.ZakupionychLitrow;
END

To mi zgłaszało błędy. Spróbowałem czegoś takiego:

delimiter //
DROP TRIGGER IF EXISTS `Trigger_UzupelnijSumeZamowienia`;
CREATE TRIGGER `Trigger_UzupelnijSumeZamowienia` BEFORE INSERT ON `Zamowienia` FOR EACH ROW BEGIN
BEGIN
SET @suma =  (SELECT RodzajePaliw.CenaZaLitr FROM RodzajePaliw WHERE RodzajePaliw.IdPaliwa = NEW.RodzajPaliwa);
SET NEW.SumaZamowienia = @suma * NEW.ZakupionychLitrow;
END

delimiter ;

po próbie wykonania w phpmyadmin widać przez chwilę ten dymek "Wczytywanie", ale po tym nic więcej się nie dzieje. W konsoli SSH po zalogowaniu sie i wybraniu bazy danych komenda:
SHOW TRIGGERS;
pokazuje:
Empty set (0.00 sec)

0

Dobra mam, tak działa:

DROP TRIGGER IF EXISTS Trigger_UzupelnijSumeZamowienia;
DELIMITER //
CREATE TRIGGER Trigger_UzupelnijSumeZamowienia BEFORE INSERT ON Zamowienia
FOR EACH ROW
BEGIN
DECLARE suma decimal(7,2) UNSIGNED;
SET suma  = (SELECT RodzajePaliw.CenaZaLitr FROM RodzajePaliw WHERE RodzajePaliw.IdPaliwa = NEW.RodzajPaliwa);
SET NEW.SumaZamowienia = suma*NEW.ZakupionychLitrow;
END;//
DELIMITER ;

Dziękuję wszystkim za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1