Php 如何在MySQL中执行多个计算?

Php 如何在MySQL中执行多个计算?,php,mysql,function,sum,Php,Mysql,Function,Sum,根据这些数据,我想求和(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

根据这些数据,我想求和(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
Q) 如何将此查询合并到MySQL中的另一个查询中

Q) 如何设置折扣后的值(新总计=总计*(100折扣)/100)

我觉得直接从数据库中求和会使系统更加健壮,这就是我想这样做的原因

Q) 有更好的方法吗


谢谢你的帮助。

我同意evan的观点-用PHP进行计算要好得多。如果没有别的,你最好看看你在做什么

但是,如果您真的想看看它在SQL中的样子,您可以尝试以下方法:

SELECT ((select total price query)*(select discount query) + (select shipping query))
当然,使用子查询,您可以将所有内容都放到一个查询语句中。但是,添加的越多,调试就越困难。在PHP中,组装片段要容易得多


祝你好运。

我同意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;

我也倾向于同意其他人的观点,他们说您应该坚持用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;

通常,对于较大的网站,数据库服务器上的负载越小越好。你可以用php来完成这一切。谢谢,我可能最终会这么做。尽管出于教育目的,我还是想知道一些在MySQL中实现这一点的方法@一般来说,对于较大的网站,数据库服务器上的负载越小越好。你可以用php来完成这一切。谢谢,我可能最终会这么做。尽管出于教育目的,我还是想知道一些在MySQL中实现这一点的方法@谢谢你的回答。这样做的方法是对sub-SELECT语句应用数学运算符,然后得到总数@谢谢你的回答。这样做的方法是对sub-SELECT语句应用数学运算符,然后得到总数@geoB@nnichols-开销的不同之处在于,您可以将计算全部移动到另一台计算机。一般来说,您可以便宜地购买前端web服务器。数据库服务器通常是一个瓶颈,而且价格昂贵。当然,这只适用于大公司的大型网站。@evan完全同意。然而,在我的例子中,为一个朋友做一个项目(小型网络初创企业)。@nnichols-开销的不同之处在于,你可以将计算转移到另一台计算机上。一般来说,您可以便宜地购买前端web服务器。数据库服务器通常是一个瓶颈,而且价格昂贵。当然,这只适用于大公司的大型网站。@evan完全同意。然而,在我的例子中,为朋友做一个项目(小型网络初创企业)。