2013-10-31 45 views
0

我有一個CSV文件,我扔到數據庫中。它正確地做到了這一點,但我不想顯然重複記錄。任何想法如何我只能記錄唯一的?我不想把它們扔進數據庫,然後運行一個DELETE查詢,因爲那不是時間有效。我怎樣才能防止我的數據庫中的重複項

if (($handle = fopen($csvfile, "r")) !== FALSE) { 
      while (($data = fgetcsv($handle,1000, ',')) !== FALSE) { 
       $count ++; 
       if ($count > 1) { 
        mysqli_query($con, "INSERT INTO $table2 (id, cat) VALUES ('".$data[0]."', '".$data[1]."')"); 
        mysqli_query($con, "INSERT INTO $table1 (id, cat) VALUES ('".$data[2]."', '".$data[3]."')"); 
        mysqli_query($con, "INSERT INTO $table3 (id, word) VALUES ('".$data[4]."', '".$data[5]."')"); 
        mysqli_query($con, "INSERT INTO $table4 (id, cl, co, imp) VALUES ('".$data[0]."','".$data[6]."', '".$data[7]."', '".$data[8]."')"); 
       } 
      } 

     } 
+2

使獨特的列?使用類似PDO的東西來跳過重複? – Ahmad

回答

3

的一種方法是將所有的記錄後,你可以添加一個唯一索引並刪除重複與

ALTER IGNORE TABLE your_table 
ADD UNIQUE INDEX dup_idx (column_1, column_2, column_3, column_3); 

另一種方法是,添加此唯一索引之前插入,然後使用insert ignore查詢

INSERT IGNORE INTO table (column1,column2) VALUES ('value1','value2'); 

這將忽略插入重複條目時發生的錯誤,因爲唯一索引在那裏也會跳過重複條目插入。

0

您可以使用德唯一鍵的方式,或者你可以在你正在考慮尋找重複的特定列使用

WHERE NOT EXISTS 

。 因此,它會像

Insert into table name() values() where not exists (Select statement)