php mysql 按给定参数计算、求和和分组

标签 php mysql group-by sum

我的购物车中有一件商品,需要在乘以每件商品的数量后计算SUM发货重量。

让我们说:

items currently in-cart (pid): 11, 12, 67
items qty: 2, 5, 1

这些 pid 的表:

enter image description here

PHP 函数根据给定的pidmerchant_code分组获取最大运输成本总重量:

function get_g_checkout_shipment_fees($pids=array())
{

    $q  = "SELECT 
              merchant_code, 
              MAX(shipping_alt) AS max_g_shipment_cost, 
              SUM(weight) AS sum_g_shipment_weight ";
    $q .= "FROM products ";
    $q .= "WHERE pid IN(".implode(", ", $pids).") ";
    $q .= "GROUP BY merchant_code";

    $sql = $mysqli->query($q);

    if($sql->num_rows > 0){
        return $sql;
    }
    return false;
}

上述函数的输出:

enter image description here

这是我的问题,我想传递一个额外的数组参数(数量)来实现如下功能:

function get_g_checkout_shipment_fees($pids=array(), $qtys=array())
{
    ...
}

我需要将每个重量 * 数量相乘,并得到SUM货件重量和 GROUP BYmerchant_code

在找到SUM发货重量之前,我需要进行必要的乘法,如下所示:

enter image description here

这就是我想要的结果:

enter image description here

如何在函数中做到这一点?这可能吗?

感谢任何帮助!

最佳答案

执行此操作的自然方法是将购物篮中的商品及其数量存储在表中。例如,以下代码使用派生表执行此操作:

SELECT merchant_code, 
       MAX(shipping_alt) AS max_g_shipment_cost, 
       SUM(weight) AS sum_g_shipment_weight,
       SUM(weight * qty) as sum_weight_qty
FROM (SELECT 11 as pid, 2 as qty UNION ALL
      SELECT 12, 5 UNION ALL
      SELECT 67, 1
     ) pp JOIN
     products p
     ON p.pid = pp.pid
GROUP BY merchant_code;

如果产品/数量对存储在另一个表中或通过某种查询生成,则相同的逻辑将成立。

关于php mysql 按给定参数计算、求和和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41455541/

相关文章:

php - 如何对从 phpMyAdmin 获取数据的 ListView 进行排序

mysql - 每个作者在 wordpress 中的最新帖子

mysql - 获取每行两列之间的最小值

PHP:在线离线状态

php - 如何在多个客户端同步播放YouTube视频?

php - 在重定向到安全服务器 (ssl) 以防数据量很大时, session 丢失

PHP SQL 没有带字符串的结果

java - 如何使用 MySql 处理日语搜索查询?

python - 要合并的大文件。如何防止 Pandas 合并中的重复项?

php - Codeigniter:获取相同值之间的公共(public)列值