2017-04-07 96 views
1

我想通過csv文件添加數據到數據庫。我能夠實現這一點,但每當我再次上傳該文件它得到重複,我不希望特定行的數據再次進入一行,但一個特定的列字段可能會重複。下面的代碼是上傳文件我有具有表格位置的數據庫具有用於ID(自動遞增),狀態,城市的字段。從csv文件添加數據到mysql數據庫,避免重複在php

<?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> 
+0

得到解決方案使用插入忽略成(........),同時使城市獨特的表中 –

回答

0

您需要INSERT之前創建SELECT查詢一些領域來檢查記錄所有腦幹。如果選擇找到的記錄 - 不要將其插入數據庫。

0

有針對

  1. 2解決方案,如果你不想重複的州,市,區的組合,然後添加一個唯一鍵所有列

ALTER TABLE `location` ADD UNIQUE `unique_index`(`State`,`City`,`District`); 
  • 之前與插入數據到表檢查查詢它已經存在與否。如果存在,則跳過該行/日期。如果不存在Insert行數據。
  • 1

    第一種方式: 結合獨特的國家,市,區一起:

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

    ,並插入查詢應該是try catch

    第二種方式: 插入您應該手動刪除重複後從您的表 How to delete duplicates on a MySQL table?

    0

    您可以使用插入和更新在一個查詢。

    如果數據已經存在,那麼更新該數據 只是將您的插入查詢更改爲我的插入查詢。

    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];