Sqlite:删除时更新不同表上的不同行

时间:2014-02-01 15:54:56

标签: php pdo triggers sqlite foreign-keys

我在基于php和sqlite3的小型pos系统上工作。 DB包含一个订单表和一个表,其中包含与orders-table相关的产品(外键)。订单表有一行显示总计,这是通过PHP计算的。它是所有添加产品的总和。每当我添加或删除产品时,我都必须更新订单表。

我的问题:是否可以将订单 - 表 - >价格的价格行与仅在sqlite中添加的产品的价格总和同步,以便订单 - >价格仅仅是对总和的参考(related_products->价格)?

2 个答案:

答案 0 :(得分:1)

  

是否可以将orders-table->价格的价格行与仅在sqlite中添加的产品的价格总和同步

你的意思是这样吗?

CREATE TRIGGER tg_item_insert
AFTER INSERT ON order_items
FOR EACH ROW 
BEGIN
  UPDATE orders 
     SET price = price + NEW.qty * NEW.price
   WHERE order_id = NEW.order_id;
END;

CREATE TRIGGER tg_item_delete
AFTER DELETE ON order_items
FOR EACH ROW 
BEGIN
  UPDATE orders 
     SET price = price - OLD.qty * OLD.price
   WHERE order_id = OLD.order_id;
END;

CREATE TRIGGER tg_item_update
AFTER UPDATE ON order_items
FOR EACH ROW 
BEGIN
  UPDATE orders 
     SET price = price - OLD.qty * OLD.price + NEW.qty * NEW.price
   WHERE order_id = NEW.order_id;
END;

这是 SQLFiddle 演示

答案 1 :(得分:0)

感谢您的回答和sqlfiddle链接。但这会使系统放慢太多。 我需要像跟踪逻辑那样的东西作为trigger_function

CREATE TRIGGER tg_item_insert
AFTER INSERT ON order_items
BEGIN
  UPDATE orders 
     SET price = (SELECT sum(price) FROM order_items WHERE order_id= ---> .last_inserted_order_id <---- )
   WHERE order_id = ---> .last_inserted_order_id <----;
END;
//

是否可以在触发器函数中获取并使用last_rowid?