如何在MySQL中执行多次计算?

时间:2012-04-15 13:45:05

标签: php mysql function sum

鉴于这些数据,我想总结(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)

我觉得通过直接汇总数据库中的总数会使系统更加健壮,这就是为什么我想这样做。

问)有更好的方法吗?

感谢您的帮助。

2 个答案:

答案 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;