鉴于这些数据,我想总结(tbl_basket sub),乘以折扣,加上运费。
# 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中的另一个查询中?
问)如何设置折扣后的价值(新总数=总数*(100折扣)/ 100)
我觉得通过直接汇总数据库中的总数会使系统更加健壮,这就是为什么我想这样做。
问)有更好的方法吗?
感谢您的帮助。
答案 0 :(得分:2)
我同意evan - 在PHP中进行计算要好得多。如果没有别的,你可以更好地看到你在做什么!
但是如果你真的想在SQL中看到它的样子,你可以尝试这样的事情:
SELECT ((select total price query)*(select discount query) + (select shipping query))
当然,使用子查询,您可以将所有内容都放入单个查询语句中。但是,添加的越多,调试就越困难。在PHP中,组装这些部分要容易得多。
祝你好运。答案 1 :(得分:1)
我也倾向于同意那些说你应该坚持在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;