0

DBに投げているCSVファイルがあります。これは正しく行われますが、明らかにレコードを繰り返したくありません。ユニークなものだけを記録する方法はありますか? DELETEそれらをDBに投入してからクエリを実行したくありません。それは時間効率が悪いからです。

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

1 つの方法は、すべてのレコードを挿入した後、一意のインデックスを追加して重複を削除することです。

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 に答える