[英]MYSQL and PHP calculate total price of orders table every day and every month, populate new summary table
[英]MySQL Summary price of order items in orders table
我有三个表:
CREATE TABLE IF NOT EXISTS 'phones' (
phone_id INT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price FLOAT NOT NULL,
description TEXT
);
CREATE TABLE IF NOT EXISTS 'orders' (
order_id INT PRIMARY KEY,
date DATE NOT NULL ,
summary FLOAT NOT NULL
);
CREATE TABLE IF NOT EXISTS 'order_items' (
phone_id INT,
order_id INT,
quantity INT NOT NULL,
FOREIGN KEY (phone_id) REFERENCES phones (phone_id),
FOREIGN KEY (order_id) REFERENCES orders (order_id)
);
如何将整个订单的summary
价格设置为电话价格*数量的总和: phones.price * order_items.quantity
。 有可能吗? 还是应该以更适当的方式更改数据库方案?
如果要对所有记录执行此操作,请使用内部联接。
update order
set summary = phones.price * order_items.quantity;
from order
inner join order_items
on order.order_id = order_items.order_id
inner join phones
on order_items.phone_id = phones.phone_id
您可以通过加入表并更新订单摘要来实现此目的,如下所示。
Update orders o
Inner join order_items oi On oi.order_id = o.order_id
Inner join phones p on p.phone_id = oi.phone_id
Set o.summary = p.prices * oi.quantity.
是的,您可以做到,但是您需要在子查询中汇总价格:
Update orders o left join
(select oi.order_id, sum(p.prices * oi.quantity) as summary
from order_items oi join
phones p
on p.phone_id = oi.phone_id
group by oi.order_id
) oo
on oo.order_id = o.order_id
set o.summary = oo.summary;
注意: left join
确保所有订单将被更新。 如果该项目没有订单行,则summary
将设置为NULL
。 使用inner join
,不匹配的订单将不会更改summary
值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.