首页 > 解决方案 > 如果特定列中没有重复项,则在 codeigniter 中插入批处理

问题描述

我的数据库中有一个表。表结构如下

在此处输入图像描述

我需要将数据作为批处理插入到该表中,但要避免重复输入(这里重复意味着intCampaignID 和 intMobileNumber 的相同组合)。

以下是我的模型中的插入功能

function addToCampaign($data){
    $voiceengine = $this->load->database('voiceengine', TRUE);
    $scheduleData = array();

    $mobiles = explode(',', $data['destinations']); 
    $mobilesData = array();
    foreach($mobiles as $mobile){    
        if (trim(strlen($mobile)) > 10)
            $mobile = substr(trim($mobile), -10); 
        else
            $mobile = trim($mobile);
        if(!in_array($mobile, $mobilesData)){
            array_push($mobilesData, $mobile);
        }  

    }

    foreach($mobilesData as $mobile){            

        $campaignData = array(
            'intCampaignID' => $data['campaign'],
            'intMobileNumber' => $mobile);                    

        array_push($scheduleData, $campaignData);
    } 
    $voiceengine->insert_batch('Voice.CampaignNumbers', $scheduleData);
}

我不知道该怎么做。我搜索了一个解决方案,但所有解决方案都在避免基于键的重复。但这些字段不是关键字段,我无权更改结构。有人请帮我这样做

更新
我已经在模型中更新了我的函数

function addToCampaign($data){
    $voiceengine = $this->load->database('voiceengine', TRUE);
    $scheduleData = array();

    $mobiles = explode(',', $data['destinations']); 
    $mobilesData = array();
    foreach($mobiles as $mobile){    
        if (trim(strlen($mobile)) > 10)
            $mobile = substr(trim($mobile), -10); 
        else
            $mobile = trim($mobile);
        if(!in_array($mobile, $mobilesData)){
            array_push($mobilesData, $mobile);
        }  

    }

    foreach($mobilesData as $mobile){ 
        $voiceengine->where('intCampaignID', $data['campaign']); 
        $voiceengine->where('intMobileNumber', $mobile);  
        $count = $voiceengine->count_all_results('Voice.CampaignNumbers');    // need a simple method  
        if($count <= 0)   {    

            $campaignData = array(
                'intCampaignID' => $data['campaign'],
                'intMobileNumber' => $mobile);                    

            array_push($scheduleData, $campaignData);
        }
    } 
    $voiceengine->insert_batch('Voice.CampaignNumbers', $scheduleData);
}  

更新后的功能将起作用。但我正在寻找一个简单的解决方案

标签: phpsql-servercodeigniter-3bulkinsert

解决方案


在插入之前删除重复的值:

$scheduleData = array_map("unserialize", array_unique(array_map("serialize", $scheduleData)));

然后运行insert_batch函数


推荐阅读