如何计算零件总价总和?基于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
相关产品推荐
相关产品推荐

