【问题标题】:add data from csv file to mysql database avoiding duplicates in php将数据从 csv 文件添加到 mysql 数据库,避免 php 中的重复
【发布时间】:2017-04-07 12:38:42
【问题描述】:

我想通过 csv 文件将数据添加到数据库。我能够做到这一点,但是每当我再次上传该文件时,它就会重复,我不希望特定行的数据再次连续输入,但特定列字段可能会重复。以下代码用于上传文件具有表位置的数据库,其中包含 ID(自动递增)、州、市的字段。

<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
require ('dbconfig.php');

if(isset($_POST['submit']))
{
    $fname = $_FILES['sel_file']['name'];
    echo 'upload file name: '.$fname.' ';
    $chk_ext = explode(".",$fname);

    if(strtolower(end($chk_ext)) == "csv")
    {
        $filename = $_FILES['sel_file']['tmp_name'];
        $handle = fopen($filename,"r");

        while (($data = fgetcsv($handle, 10000, ",")) !== FALSE)
        {
            $sql = "INSERT into location(State,City,District) values('$data[0]','$data[1]','$data[2]')";
            mysqli_query($conn,$sql) or die ;
        }
        fclose($handle);
        echo "Successfully imported";
    }
    else
    {
        echo "Invalid File";
    }

}
?>
<h1>import CSV file</h1>
<form action='<?php echo $_SERVER["PHP_SELF"];?>' method='post' enctype="multipart/form-data">
Import File: <input type='file' name='sel_file' size='20'>
<input type='submit' name='submit' value='submit'>
</form>

【问题讨论】:

  • 使用 insert ignore into(........) 得到解决方案,同时使城市在表中独一无二

标签: php mysql csv


【解决方案1】:

第一种方式: 将独特的州、市、区组合在一起:

ALTER TABLE `DB Name`.`Table Name` ADD UNIQUE (`State`, `City`, `District`);

并且插入查询应该在try catch

第二种方式: 插入后,您应该从表中手动删除重复项 How to delete duplicates on a MySQL table?

【讨论】:

    【解决方案2】:

    您需要在INSERT 之前创建SELECT 查询,以检查某些字段的记录是否存在。如果选择找到的记录 - 不要将其插入数据库。

    【讨论】:

      【解决方案3】:

      有两种解决方案

      1. 如果您不想重复州、市和区的组合,请在所有列中添加一个唯一键

      试试

      ALTER TABLE `location` ADD UNIQUE `unique_index`(`State`,`City`,`District`);
      
      1. 在将数据插入表之前,使用select 查询它是否已经存在。如果存在,则跳过该行/日期。如果不存在Insert 行数据。

      【讨论】:

        【解决方案4】:

        您可以将插入和更新查询合二为一。

        如果数据已经存在,则更新该数据 只需将您的插入查询更改为我的插入查询即可。

        INSERT INTO location(State,City,District) VALUES($data[0]','$data[1]','$data[2]') ON DUPLICATE KEY UPDATE    
        State=$data[0], City=$data[1] ,District=$data[2];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-11-14
          • 2015-09-11
          • 2014-10-07
          • 2016-04-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多