如何处理SQL中的重复记录?

时间:2015-12-26 09:31:11

标签: php mysql codeigniter

我正在将文件上传到mysql数据库。现在该文件包含登录和注销用户的记录。以下是其结构。 strcture

我使用PHP codeigniter上传该文件并将其数据插入SQL。 这里date_data被定义为 UNIQUE 因此我不会在同一天获得任何重复记录,因为它包含每日用户登录和注销数据的信息。

现在我已经上传了11月1日到12月10日的数据。然后我再次从12月1日上传数据到1月1日我将收到一个错误,因为它将从12月1日和其他连续几天给出重复数据的错误。是否有可能我可以跳过重复数据并插入剩余的唯一数据?

对于我当前的代码,它会在找到重复数据时停止执行。我想只插入那些唯一的数据。

下面是我要插入SQL表的代码:

控制器

public function upload()
{ 


    $file = rand(1000, 100000) . "-" . $_FILES['file']['name'];
    $file_loc = $_FILES['file']['tmp_name'];
    $file_size = $_FILES['file']['size'];
    $file_type = $_FILES['file']['type'];
    $folder = "uploads/";
    $location = $_FILES['file'];


    $new_size = $file_size / 1024; // new file size in KB
    $new_file_name = strtolower($file);
    $final_file = str_replace(' ', '-', $new_file_name); // make file name in lower case

    if (move_uploaded_file($file_loc, $folder . $final_file)) 
    {



            $handle = fopen($folder.$final_file, "r") or die("file cannot open");

            if ($handle) {
                while (($line = fgets($handle)) !== false) 
                {
                    $lineArr = explode("\t", "$line");    

                    $result = $this->attendance_m->insert_file_content($lineArr) ;    
                }
                if (fclose($handle)) {

                      $this->alert('successfully uploaded', 'admin/attendance.php?success');
                    redirect('admin/attendance');
                }

            } 
            else{
                echo "file cannot open";
            } 

    }

    }

模特:

public function insert_file_content($ lineArr) {

$data = array(
   'emp_id'     => $lineArr[0],
   'date_data'  => $lineArr[1],
   'abc'        => $lineArr[2],
   'def'        => $lineArr[3],
   'entry'      => $lineArr[4],
   'ghi'        => $lineArr[5],
);

  $this->db->insert('daily_data2', $data);
   }

1 个答案:

答案 0 :(得分:2)

忽略插入

上的重复记录
 $data = array(
 'emp_id'     => $lineArr[0],
 'date_data'  => $lineArr[1],
 'abc'        => $lineArr[2],
 'def'        => $lineArr[3],
 'entry'      => $lineArr[4],
 'ghi'        => $lineArr[5],
);

$sql = "INSERT IGNORE INTO `daily_data2` 
(`emp_id`,`date_data`,`abc`,`def`,`entry`,`ghi`) 
 VALUES
(?,?,?,?,?,?)"; 
$this->db->query($sql, $data);

您也可以尝试这种方式

$result = $this->db->get_where('daily_data2', array('date_data' => $data['date_data'));

if(count( $result->result_array() ) < 1)
{
    //insert a new record
}