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

CodeIgniter 3导入Excel至数据库时如何跳过重复记录

解决CodeIgniter 3上传Excel跳过重复记录的问题

要实现上传Excel时自动跳过重复记录,核心是先判断记录是否已存在,再决定是否插入,同时配合数据库唯一索引做双重保障,具体步骤如下:

1. 数据库层面添加唯一约束

先给你的数据表(假设表名为your_table)的重复判断字段(比如NTN,这类标识通常具备唯一性)添加唯一索引,从数据库层面拦截重复数据:

ALTER TABLE your_table ADD UNIQUE KEY `ntn_unique` (`NTN`);

2. 修改控制器代码:读取Excel时过滤重复记录

在读取Excel每行数据后,先检查数据库中是否已存在该记录,仅将不存在的记录加入插入数组:

修改控制器uploadData方法的循环部分:

$flag = true;
$i = 0;
foreach ($allDataInSheet as $value) {
    if ($flag) {
        $flag = false;
        continue;
    }
    // 检查当前NTN对应的记录是否已存在
    $is_exists = $this->import_model->check_record_exists($value['B']);
    if (!$is_exists) {
        $inserdata[$i]['SR_NO'] = $value['A'];
        $inserdata[$i]['NTN'] = $value['B'];
        $inserdata[$i]['NAME'] = $value['C'];
        $inserdata[$i]['BUSINESS_NAME'] = $value['D'];
        $i++;
    }
}

3. 模型层添加检查方法和修改插入逻辑

在import_model中添加检查记录是否存在的方法:

public function check_record_exists($ntn) {
    $this->db->where('NTN', $ntn);
    $query = $this->db->get('your_table');
    return $query->num_rows() > 0;
}

然后修改importdata方法,使用INSERT IGNORE语法(即使有漏网的重复数据,数据库也会自动跳过):

public function importdata($inserdata) {
    if(empty($inserdata)) return false;
    // 替换默认INSERT为INSERT IGNORE,遇到唯一键重复时自动跳过
    $sql = $this->db->insert_string('your_table', $inserdata[0]);
    $sql = str_replace('INSERT INTO', 'INSERT IGNORE INTO', $sql);
    foreach(array_slice($inserdata, 1) as $row) {
        $sql .= ',' . $this->db->insert_string('your_table', $row);
    }
    return $this->db->query($sql);
}

补充说明

  • 如果你的重复判断依据不是NTN,可以换成SR_NO或其他唯一字段,只需同步修改检查条件和数据库唯一索引即可。
  • 代码过滤+数据库约束的双重机制,既能减少无效数据库查询,又能确保最终数据无重复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:15:35