2016-04-07 6 views
0

Ich habe drei Tabellen berechnet:Wie Trigger erstellen Spalten zu aktualisieren, die von einer anderen aktualisierten Tabelle

Produkt (pid, pname, pbrand, pprice)

ShoppingCart (cartId, cid, aktiv, Totalprice) ShoppingCart.cid Verweise auf Customer.cid

CartItem (cartId, pid, iprice, iquantity) CartItem.cartid referenziert ShoppingCart.cartid, CartId.pid verweist Product.pid

wenn t Wenn der Produktpreis in Table Product aktualisiert wird, sollten zuerst alle Einkaufswagen (CartItem) aktualisiert werden, die dieses Produkt enthalten, und dann der Gesamtpreis aktualisiert werden, der im zugehörigen Einkaufswagen berechnet wird.

kann ich den ersten Teil fertig und ich erwarte, dass die zweite Aufgabe

delimiter // 

create trigger update_prodprice after update on product 
for each row 
begin 
    update cartitem set iprice=new.pprice where pid=new.pid 
    and cartid in (select cartid from shoppingcart where active=True); 

    update shoppingcart set totalprice=sum(cartitem.iprice*cartitem.iquantity) 
    where active=True and cartid=cartitem.cartid; 

    end // 

delimiter ; 

wie funktionieren könnte Aber das zweite Update funktioniert nicht, da die

"ERROR 1054 (42S22): Unknown column 'cartitem.cartid' in 'where clause'" 

Antwort

0

Sie mehrere Tabellen wie diese

aktualisieren
update shoppingcart s, cartitem c 
    set c.iprice = new.pprice, 
     s.totalprice = c.iprice*c.iquantity 
    where s.active=True and s.cartid=c.cartid 
    and c.pid = new.pid; 

aber Sie müssen herausfinden, wie Sie den Gesamtpreis aktualisieren, da ein Warenkorb mehrere haben kann vielleicht TEMS so etwas wie dieses

update shoppingcart s, cartitem c 
    set c.iprice = new.pprice, 
     s.totalprice = s.totalprice - old.pprice*c.iquantity + new.pprice*c.iquantity 
    where s.active=True and s.cartid=c.cartid 
    and c.pid = new.pid; 

sqlfiddle