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

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>

修正说明

  1. 分组逻辑优化:使用Order ID + EAN的组合作为分组键,确保不同订单下的同EAN数据被独立统计,避免跨订单的数量混淆。
  2. 汇总准确性提升:每个分组的Requested Qty取该组合的统一值(同一Order ID+EAN下的请求量一致),Confirmed Qty为该组合下所有包裹的数量之和。
  3. 表格可读性优化:汇总行明确标注对应的Order ID和EAN,便于区分不同组合的统计结果。

内容的提问来源于stack exchange,提问作者user3408779

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:52:44