我在基于php和sqlite3的小型pos系统上工作。 DB包含一个订单表和一个表,其中包含与orders-table相关的产品(外键)。订单表有一行显示总计,这是通过PHP计算的。它是所有添加产品的总和。每当我添加或删除产品时,我都必须更新订单表。
我的问题:是否可以将订单 - 表 - >价格的价格行与仅在sqlite中添加的产品的价格总和同步,以便订单 - >价格仅仅是对总和的参考(related_products->价格)?
答案 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?