PHP MySQL:基于Order ID与EAN的数量汇总展示问题
问题修正:按Order ID+EAN组合分组统计仓库反馈数据
问题背景
数据来源于仓库CSV文件,存入warehouse_feedback表。由于仓库拆分数量分多包裹发送,同EAN会重复出现,且同EAN可属于不同Order ID。当前代码仅按EAN分组汇总数量,未关联Order ID,导致Requested Qty和Confirmed Qty统计错误(如ID4、ID8对应的数量偏差)。需要按Order ID与EAN的组合分组,展示包裹明细后汇总对应组合的正确数量。
现有代码问题
原代码仅以ean作为分组键,将不同Order ID下的同EAN数据合并统计,导致跨订单的数量汇总错误:
$finalResults = []; foreach($results as $result){ $finalResults[$result['ean']][] = $result; // 错误分组逻辑:仅按EAN分组 }
修正后的代码
PHP数据处理部分
$stmt = $mysqliConn->prepare("SELECT id, hdr_id_fk, package_number, ean, quantity, requested_qty, order_number from warehouse_feedback where hdr_id_fk =? "); $hdr_id = 31; $stmt->bind_param("i", $hdr_id); $stmt->execute(); $result = $stmt->get_result(); $results = $result->fetch_all(MYSQLI_ASSOC); $finalResults = []; // 修正分组逻辑:按Order ID + EAN的组合作为分组键 foreach($results as $result){ // 用分隔符组合order_number和ean,避免键冲突 $groupKey = $result['order_number'] . '|' . $result['ean']; $finalResults[$groupKey][] = $result; }
HTML表格展示部分
<table border="1"> <thead> <tr> <th>ID</th> <th>Pack_num</th> <th>Order Id</th> <th>EAN</th> <th>ReqQty</th> <th>Confrmd Qty</th> </tr> </thead> <tbody> <?php foreach ($finalResults as $groupItems) { $confirmedQuantity = 0; // 获取当前分组的Order ID和EAN(取第一个元素的值,同一分组内一致) $currentOrder = $groupItems[0]['order_number']; $currentEAN = $groupItems[0]['ean']; $currentReqQty = $groupItems[0]['requested_qty']; ?> <!-- 输出分组内的包裹明细行 --> <?php foreach ($groupItems as $item) { $confirmedQuantity += $item['quantity']; ?> <tr> <td><?php echo $item['id']; ?></td> <td><?php echo $item['package_number']; ?></td> <td><?php echo $item['order_number']; ?></td> <td><?php echo $item['ean']; ?></td> <td><?php echo $item['requested_qty']; ?></td> <td><?php echo $item['quantity']; ?></td> </tr> <?php } ?> <!-- 输出当前Order ID+EAN组合的汇总行 --> <tr> <td colspan="3"></td> <td><strong>汇总 (<?php echo $currentOrder . ' | ' . $currentEAN; ?>)</strong></td> <td><strong>Req Qty - <?php echo $currentReqQty; ?></strong></td> <td><strong>Confirmed Qty - <?php echo $confirmedQuantity; ?></strong></td> </tr> <?php } ?> </tbody> </table>
修正说明
- 分组逻辑优化:使用
Order ID + EAN的组合作为分组键,确保不同订单下的同EAN数据被独立统计,避免跨订单的数量混淆。 - 汇总准确性提升:每个分组的Requested Qty取该组合的统一值(同一Order ID+EAN下的请求量一致),Confirmed Qty为该组合下所有包裹的数量之和。
- 表格可读性优化:汇总行明确标注对应的Order ID和EAN,便于区分不同组合的统计结果。
内容的提问来源于stack exchange,提问作者user3408779
相关产品推荐
相关产品推荐

