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

如何用PHP将SQL中同ID多产品数据合并为单行展示

解决同一ID多产品合并为单行的问题

方法一:SQL层直接合并(推荐,更高效)

用MySQL的GROUP_CONCAT函数直接在查询阶段合并同一ID下的产品,返回结果天然是每个ID对应一行,产品用指定分隔符拼接完成。

示例SQL语句:

SELECT 
    id, 
    GROUP_CONCAT(product_name SEPARATOR ', ') AS merged_products
FROM 
    your_table_name
GROUP BY 
    id;
  • SEPARATOR可自定义,比如用' | '或者'<br>'(适配网页输出场景)
  • 若产品存在重复,可添加DISTINCT去重:GROUP_CONCAT(DISTINCT product_name SEPARATOR ', ')

PHP端直接读取结果即可,无需额外处理:

// 假设已完成数据库连接,$conn为连接实例
$result = mysqli_query($conn, "SELECT id, GROUP_CONCAT(product_name SEPARATOR ', ') AS merged_products FROM your_table_name GROUP BY id");
while ($row = mysqli_fetch_assoc($result)) {
    echo "ID: {$row['id']}, 产品: {$row['merged_products']}<br>";
}

方法二:PHP层处理结果集

如果无法修改SQL(比如需要保留原字段结构做其他操作),可以在PHP中遍历原始结果,用数组分组实现合并。

问题根源

你之前的代码只保留第一个产品,大概率是直接把每条记录赋值给数组时,后续同ID的记录覆盖了之前的,没有做累加操作。

修正代码示例

// 1. 获取所有原始记录(按ID排序保证同ID记录连续)
$stmt = $pdo->query("SELECT id, product_name FROM your_table_name ORDER BY id");
$rawData = $stmt->fetchAll(PDO::FETCH_ASSOC);

// 2. 初始化空数组存储合并后的数据
$mergedData = [];

// 3. 遍历原始数据分组
foreach ($rawData as $item) {
    $id = $item['id'];
    $product = $item['product_name'];
    
    if (!isset($mergedData[$id])) {
        // 首次遇到该ID,初始化结构
        $mergedData[$id] = [
            'id' => $id,
            'products' => []
        ];
    }
    // 将产品添加到对应ID的产品列表中
    $mergedData[$id]['products'][] = $product;
}

// 4. 将产品列表转为字符串(按需调整分隔符)
foreach ($mergedData as &$row) {
    $row['products'] = implode(', ', $row['products']);
}
unset($row); // 解除引用,避免后续操作意外修改

// 5. 输出合并后的数据
foreach ($mergedData as $row) {
    echo "ID: {$row['id']}, 合并产品: {$row['products']}<br>";
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:10:23