鉴于此数据,我想求和(tbl_basket subt),乘以折扣,加上运费。
# tbl_basket order_id qty price subt
1 1 10.00 10.00
1 4 5.00 20.00
1 3 12.00 36.00
# tbl_coupon id name discount
1 "10% off" 10.00
# tbl_shipping id cost
1 4.99
# tbl_order coupon_id shipping_id total
1 1 ? # I want to update total
我想查询购物篮:
SELECT * FROM tbl_basket WHERE order_id = $order_id
项目求和,我想是这样的?
SELECT SUM(subt) FROM tbl_basket WHERE order_id = $order_id
查询折扣
SELECT discount FROM tbl_coupon AS coupon
INNER JOIN tbl_order AS order
WHERE coupon.id = order.coupon_id
问:如何将此查询合并到 MySQL 中的另一个查询中?
Q) 如何设置折扣后的值(新总计 = 总计*(100-折扣)/100)
我觉得通过直接对数据库中的总计求和会使系统更加健壮,这就是我想这样做的原因。
问:有没有更好的方法可以做到这一点?
感谢您的帮助。
我同意 evan 的观点 - 在 PHP 中进行计算要好得多。 如果没有别的,你可以更好地看到你在做什么!
但是如果你真的想看看它在SQL中的样子,你可以尝试这样的东西:
SELECT ((select total price query)*(select discount query) + (select shipping query))
当然,使用子查询,您可以将所有内容都放入单个查询语句中。 但是,添加的越多,调试就越困难。 在PHP中,组装这些部分要容易得多。
祝你好运。
我也倾向于同意其他人的观点,他们说你应该坚持在PHP中这样做,尽管开销几乎没有区别。 您可以使用以下查询以最小的开销计算最终总计,只要所有必要的索引都已到位。
SELECT (SUM(b.subt) * ((100 - MIN(c.discount)) / 100)) + MIN(s.cost) AS final_total
FROM tbl_order o
INNER JOIN tbl_basket b
ON o.id = b.order_id
INNER JOIN tbl_shipping s
ON s.id = o.shipping_id
INNER JOIN tbl_coupon c
ON c.id = o.coupon_id
WHERE o.id = 1
GROUP BY o.id;