You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算零件总价总和?基于PHP查询结果的求和需求

计算零件总价小计的解决方案

你现在的代码已经实现了单个零件总价的计算,要得到所有零件的小计,其实只需要在循环过程中维护一个累加变量就可以了,完全不需要额外的复杂操作。下面是修改后的代码示例:

$subtotal = 0; // 初始化小计变量
$sql = "SELECT * FROM parts WHERE jobno = '$id'"; 
$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
    while ($row = $result->fetch_assoc()) { 
        $itemTotal = $row['price'] * $row['qty'];
        $subtotal += $itemTotal; // 累加单个零件总价到小计
        
        $results['entrants'][] = array(
            'partno' => $row['partno'],
            'description' => $row['description'],
            'price' => $row['price'],
            'qty' => $row['qty'],
            'total' => $itemTotal,
        ); 
    }
    // 把小计存入结果数组,方便后续调用使用
    $results['subtotal'] = $subtotal;
} else { 
    // 无匹配零件时的占位记录
    $results['entrants'][] = array(
        'partno' => NULL,
        'description' => NULL,
        'price' => NULL,
        'qty' => NULL,
        'total' => NULL,
    );
    $results['subtotal'] = 0; // 无数据时小计设为0
}

额外说明:其实数据库SUM语句也适用

你提到觉得SELECT SUM不适用,但其实可以直接在数据库层面计算小计,这样效率会更高(减少PHP端的循环计算量),比如这样编写SQL:

SELECT 
    partno,
    description,
    price,
    qty,
    (price * qty) AS total,
    SUM(price * qty) OVER() AS subtotal
FROM parts 
WHERE jobno = '$id'

这个SQL会在每条记录里返回单个零件的total,同时返回所有零件的小计subtotal,你只需要在循环里取第一条记录的subtotal值即可,不需要PHP端手动累加。不过如果你更倾向于基于现有查询结果来计算,前面的PHP累加方式完全能满足需求。

内容的提问来源于stack exchange,提问作者Joseph Thomas Mallinson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:44:04