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

如何修改MySQL查询 筛选同SKU对应不同子公司的记录

实现方案

你可以选择SQL层直接筛选或者PHP集合层二次处理两种方式实现需求,两种方案都能满足去重、仅保留对应多个子公司的SKU记录的要求。

方案1:调整MySQL查询语句(推荐,性能更优)

核心逻辑是先找出所有关联了≥2个不同subsidiary的product_sku,再关联原查询结果取对应记录,同时做去重。
调整后的SQL语句如下:

SELECT DISTINCT main_table.*, secondTable.*
FROM mst_rma_item AS main_table
LEFT JOIN mst_rma_rma AS secondTable ON main_table.rma_id = secondTable.rma_id
INNER JOIN (
    -- 筛选出对应至少2个不同子公司的SKU
    SELECT t1.product_sku
    FROM mst_rma_item t1
    LEFT JOIN mst_rma_rma t2 ON t1.rma_id = t2.rma_id
    GROUP BY t1.product_sku
    HAVING COUNT(DISTINCT t2.subsidiary) >= 2
) AS valid_sku ON main_table.product_sku = valid_sku.product_sku

语句逻辑说明:

  • 子查询部分按product_sku分组,用COUNT(DISTINCT subsidiary)统计每个SKU对应的不同子公司数量,仅保留数量≥2的SKU
  • 外层用INNER JOIN关联有效SKU列表,自动过滤掉只对应单个子公司的SKU(比如示例中的26-MB02)
  • 加入DISTINCT关键字自动去除重复条目,解决示例中item_id=1重复出现的问题

方案2:PHP代码层处理现有集合数据

如果不想修改原有SQL,也可以在拿到$collection->getData()的结果后,通过PHP逻辑做二次处理,代码示例如下:

$rawData = $collection->getData();
// 第一步:统计每个SKU对应的不同子公司数量
$skuSubsidiaryMap = [];
foreach ($rawData as $item) {
    $sku = $item['product_sku'];
    $subsidiary = $item['subsidiary'];
    $skuSubsidiaryMap[$sku][$subsidiary] = 1;
}
// 筛选有效SKU:对应子公司数量≥2
$validSkus = [];
foreach ($skuSubsidiaryMap as $sku => $subsidiaries) {
    if (count($subsidiaries) >= 2) {
        $validSkus[$sku] = 1;
    }
}
// 第二步:筛选有效记录+去重
$result = [];
$pickedItemIds = [];
foreach ($rawData as $item) {
    // 跳过无效SKU对应的记录
    if (!isset($validSkus[$item['product_sku']])) {
        continue;
    }
    // 用item_id做唯一标识去重
    if (!isset($pickedItemIds[$item['item_id']])) {
        $result[] = $item;
        $pickedItemIds[$item['item_id']] = 1;
    }
}
// 最终的$result就是符合要求的结果

处理逻辑说明:

  • 第一次遍历统计每个SKU对应的所有不重复子公司,筛选出符合要求的有效SKU
  • 第二次遍历过滤掉不属于有效SKU的记录,同时以item_id为唯一标识去除重复条目
效果验证

使用提供的测试数据验证,两种方案最终输出结果完全匹配预期:

Array
(
    [0] => Array
        (
            [item_id] => 1
            [rma_id] => 1
            [product_sku] => 24-MB02
            [subsidiary] => CA
        )
    [1] => Array
        (
            [item_id] => 2
            [rma_id] => 2
            [product_sku] => 24-MB02
            [subsidiary] => DE
        )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:03:24