我正在制作一个Web应用程序,以使客户订购任何东西。为此,我制作了一个具有下表的MySQL数据库:
customers
orders
orders-items
products
在customers
表是所有的人,如信息:
例子:
orders
表格中提供了有关该表格的所有特定信息,例如:
id
字段customers
(customer_id)关联的是订购的哪个客户例子:
在orders-items
表都是其每一个客户订购的商品,这是被链接的order-id
从上表。
id
字段orders
(order_id)链接products
表中的ID字段链接。(product_id)例子:
下products
表是有关产品的所有信息:
product_id
字段链接order_items
(id)例子:
问题:
我有这个查询:
SELECT `orders-items`.`order_id` , SUM(`orders-items`.`quantity`* `products`.`price`) total
FROM `orders-items`
INNER JOIN `Products` ON `orders-items`.`products_id` = `products`.`id`
它向我显示了每个order_id
人必须支付的所有总价格的列表。
但我怎么做这使的该值total_price
每order_id
有薪酬automatticly插入到orders
表内total_price
,在合适的领域order_id
中插入产品到我的时候orders-list
表?
或者是它最好还是不跟踪的total_prices
的customers
要付钱?
需要考虑的几件事。
拥有一个total_price
本身就是多余的。您可以随时通过汇总该订单商品的价格来了解总数。出于性能方面的原因而拥有它可能很有趣,但这是否真的适合您的方案?很少是这样。
有一个price
在每个order_item
另一只手将是有益的。原因是因为这些产品的价格将来可能会发生变化,并且您不想丢失有关该次特定销售时这些产品的销售量的信息。
无论如何,您都可以total_price
像这样更新使用触发器:
DELIMITER $$
CREATE TRIGGER order_items_insert AFTER INSERT ON `orders-items` FOR EACH ROW
BEGIN
UPDATE orders o INNER JOIN (SELECT i.order_id id, SUM(i.quantity * p.price) total_price FROM `orders-items` i INNER JOIN products p ON p.id = i.products_id AND i.order_id = new.order_id) t ON t.id = o.id SET o.total_price = t.total_price;
END$$
CREATE TRIGGER order_items_update AFTER UPDATE ON `orders-items` FOR EACH ROW
BEGIN
UPDATE orders o INNER JOIN (SELECT i.order_id id, SUM(i.quantity * p.price) total_price FROM `orders-items` i INNER JOIN products p ON p.id = i.products_id AND i.order_id = new.order_id) t ON t.id = o.id SET o.total_price = t.total_price;
END$$
CREATE TRIGGER order_items_delete AFTER DELETE ON `orders-items` FOR EACH ROW
BEGIN
UPDATE orders o INNER JOIN (SELECT i.order_id id, SUM(i.quantity * p.price) total_price FROM `orders-items` i INNER JOIN products p ON p.id = i.products_id AND i.order_id = old.order_id) t ON t.id = o.id SET o.total_price = t.total_price;
END$$
DELIMITER ;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句