为了账号安全,请及时绑定邮箱和手机立即绑定

对 MySQL 搜索的每个结果执行计算

对 MySQL 搜索的每个结果执行计算

PHP
蛊毒传说 2023-10-22 21:43:36
为了计算订单的总金额,我转到商品表,并计算该订单的商品总和。这是我的代码:SELECT orders.*,  ROUND(SUM(`orders_article_updated_quantity` * (`orders_article_price` * (100 - orders_article_rate)/100)), 2) AS 'order_Total'FROM orders JOIN orders_articles  ON orders.order_id = orders_articles.orders_article_id_orderWHERE oreder_id = '" . $order['order_id'] . "'这段代码适用于订单,我得到了很好的结果。现在我想对订单列表或所有订单执行此操作。所以我从我的请求中删除了“WHERE”。我只得到一个结果,即所有订单的总和。对于每个结果(订单),我想要其自己的文章的总和。
查看完整描述

1 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

为此你需要聚合。考虑group by向查询添加一个子句,如下所示:


SELECT 

    o.*, 

    ROUND(SUM(orders_article_updated_quantity * orders_article_price * (1 - orders_article_rate/100)), 2) AS order_Total

FROM orders o

INNER JOIN orders_articles oa ON ao.orders_article_id_order = o.order_id

GROUP BY o.order_id

请注意,您应该在查询中的每一列前面加上它们所属的表的前缀 - 中的列的情况并非如此,SUM()这会产生歧义。


另一个选项是相关子查询(这允许orders没有任何文章):


SELECT 

    o.*, 

    (

        SELECT ROUND(SUM(orders_article_updated_quantity * orders_article_price * (1 - orders_article_rate/100)), 2) 

        FROM orders_articles oa 

        WHERE ao.orders_article_id_order = o.order_id

    ) AS order_Total

FROM orders o


查看完整回答
反对 回复 2023-10-22
  • 1 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信