如何在 MySQL 中执行多个计算


How to perform several calculations in MySQL?

鉴于此数据,我想求和(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;