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]."')"); 
                }
            }

        }
4

2 回答 2

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');

这将忽略插入重复条目时发生的错误,因为存在唯一索引,它也会跳过重复条目插入。

于 2013-10-31T08:06:40.547 回答
0

您可以使用唯一键方式,也可以使用

WHERE NOT EXISTS 

在您正在考虑查找重复项的特定列上。所以它会像

Insert into table name() values () where not exists (Select statement)
于 2013-10-31T08:12:44.277 回答