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

CodeIgniter3导入CSV/Excel:添加SKU已存在则跳过导入规则

实现CodeIgniter3导入Excel/CSV时跳过已存在SKU的记录

1. 先拉取数据库中已有的SKU列表

在application/controllers/Home.php的import_excel函数开头,先查询数据库把所有已存在的SKU取出来,转成方便快速查找的数组。假设你的商品表是products,SKU字段为sku:

// 获取数据库中已存在的SKU
$existing_skus = $this->db->select('sku')->get('products')->result_array();
// 转成一维数组,后续判断更高效
$existing_sku_list = array_column($existing_skus, 'sku');
// 数据量大的话,转成关联数组用isset判断更快(可选优化)
// $existing_sku_list = array_flip($existing_sku_list);

2. 遍历导入行时添加SKU检查逻辑

在你读取Excel/CSV行数据的循环里,先取出当前行的SKU,判断是否在已存在列表里,存在就直接跳过,不存在再执行插入操作。

假设你原有的循环代码类似这样,修改后:

// 假设$sheet是PhpSpreadsheet的工作表实例
$highestRow = $sheet->getHighestRow();
// 从第2行开始(默认第1行是表头)
$imported = 0;
$skipped = 0;

for ($row = 2; $row <= $highestRow; $row++) {
    $sku = trim($sheet->getCell('A' . $row)->getValue()); // 假设SKU在A列,加trim避免空格干扰
    // 检查SKU是否已存在
    if (in_array($sku, $existing_sku_list)) {
        // 如果用了关联数组优化,就改成 if (isset($existing_sku_list[$sku]))
        $skipped++;
        continue;
    }

    // 组装当前行的数据(根据你的表字段调整)
    $data = [
        'sku' => $sku,
        'product_name' => $sheet->getCell('B' . $row)->getValue(),
        'price' => $sheet->getCell('C' . $row)->getValue(),
        // 其他字段...
    ];

    // 插入数据库
    $this->db->insert('products', $data);
    $imported++;
}

// 可以给用户返回导入统计
$this->session->set_flashdata('msg', "导入完成:成功添加{$imported}条,跳过{$skipped}条已存在SKU的记录");
redirect('home');

注意事项

  • 确保SKU字段在数据库里是唯一索引,双重避免重复数据
  • 如果导入的文件很大,建议分批处理,避免内存溢出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:25:34