2016-04-07 67 views
0

計算列:如何創建觸發器來更新我有三個表從另一個更新表

產品(PID,PNAME,pbrand,pprice)

購物車(cartid,CID,活躍,totalprice) ShoppingCart.cid引用Customer.cid

CartItem(cartid,PID,iprice,iquantity) CartItem.cartid引用ShoppingCart.cartid,CartId.pid引用Product.pid

如果噸他在表格產品中的產品價格已更新,它應該先更新包含該產品的所有購物車(CartItem),然後更新相關購物車中計算的總價格。

我能完成的第一部分,我希望第二個任務可以工作像

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 ; 

但是第二次更新不能正常工作,因爲

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

回答

0

可以更新這樣

多個表
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; 

但你必須弄清楚如何更新總價,因爲購物車可以有多個i TEMS也許這樣的事情

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

相關問題