【发布时间】:2014-08-08 21:18:14
【问题描述】:
我正在制作一个 Web 应用程序来让客户订购任何商品。为此,我制作了一个 MySQL 数据库,其中包含以下表格:
customersordersorders-itemsproducts
customers 表中包含有关此人的所有信息,例如:
- 客户 ID,用于主键和自动增量 (id)
- 名字 (first_name)
- 姓氏 (last_name)
- 电子邮件地址 (email_address)
- 客户信息 (customer_info)
示例:
orders 表中包含有关它的所有具体信息,例如:
- 主键和自动增量 (id) 的订单 ID
- 它订购了哪个客户,与
customers表 (customer_id) 中的id字段相关联 - 订单信息 (order_info)
- 订单需要去的位置(位置)
- 客户必须支付的总价 (total_price)
- 订单创建(创建)时间
示例:
orders-items 表中是每个客户订购的所有商品,这是由上表中的order-id 链接的。
- ID,用于主键和自动增量,不用于任何关系 (id)
- 订单 ID,用于哪个产品对应哪个订单。这与
orders表 (order_id) 中的id字段相关联 - 产品 ID,用于他们订购的产品,它与
products表中的 id 字段相关联。 (product_id) - 他们订购的产品数量(数量)
示例:
products 表中包含有关产品的所有信息:
- 主键和自动递增的 ID,与
order_items表 (id) 中的product_id字段相关联 - 产品名称(名称)
- 产品的描述(description)
- 产品的价格(价格)
示例:
问题:
我有这个查询:
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 必须支付的所有总价格的列表。
但是我该如何做到这一点,以便在插入产品时将每个 order_id 必须支付的 total_price 的值自动插入到右侧 total_price 字段内的 orders 表中 order_id进入我的orders-list 表?
还是不要跟踪total_prices 和customers 必须支付的费用?
【问题讨论】:
-
我不会在最后结账/付款之前存储应付总额,因为它经常随着添加/删除项目而变化。您可以保留总数,但每次添加/删除商品时都需要进行第二次查询,或者您可以设置 mysql
trigger以在每次商品更改时更新购物车总数。 -
您可能已经考虑过这个问题,但是当商品的价格发生变化时,您将如何处理呢?您是否会向 items 表中添加一条新记录,其中除了价格之外所有内容都相同,还是更新现有记录的价格?如果您通过更新更改价格,您的
SUM查询对于旧订单将不再准确,您需要将价格添加到您的订单项目表中以跟踪订单时商品的价格. -
@Don'tPanic 我希望当我更改商品的价格时,它没有更新过去订单总价格中的任何内容。只有当我添加一个新的。或者你是什么意思?
-
@Sean 但是这仍然是跟踪客户必须支付的总价格的好方法吗?那我该怎么做呢?