次のスクリプトを使用してMYSQLデータベースにレコードをアップロードしています。クライアントレコードがアップロードされ、すでにデータベースに存在し複製されている場合があります。アップロードされたCSVからMYSQLデータベースの重複を防止
ここでは、アップロード時にcsvファイル自体から重複を削除する方法を尋ねる人がたくさんいます。たとえば、bobという名前のインスタンスが2つあり、csvのlh456glというポストコードがアップロードしていない私が知りたいのは、すでにレコードが存在するレコードを挿入しないように、そのレコードを追加する前にレコードをデータベースでチェックすることが可能かどうかです。
だから、のようなもの:
if exist namecolumn=$name_being_inserted and postcode=postcode_being_inserted then
do not add that record.
を行うのは、これがさえ可能ですか?。
<?php
//database connect info here
//check for file upload
if(isset($_FILES['csv_file']) && is_uploaded_file($_FILES['csv_file']['tmp_name'])){
//upload directory
$upload_dir = "./csv";
//create file name
$file_path = $upload_dir . $_FILES['csv_file']['name'];
//move uploaded file to upload dir
if (!move_uploaded_file($_FILES['csv_file']['tmp_name'], $file_path)) {
//error moving upload file
echo "Error moving file upload";
}
//open the csv file for reading
$handle = fopen($file_path, 'r');
while (($data = fgetcsv($handle, 1000, ',')) !== FALSE) {
//Access field data in $data array ex.
$name = $data[0];
$postcode = $data[1];
//Use data to insert into db
$sql = sprintf("INSERT INTO test (name, postcode) VALUES ('%s','%s')",
mysql_real_escape_string($name),
mysql_real_escape_string($postcode)
);
mysql_query($sql) or (mysql_query("ROLLBACK") and die(mysql_error() . " - $sql"));
}
//delete csv file
unlink($file_path);
}
?>
レコードが重複しているかどうかを判断するために使用するすべての列に一意のインデックスを追加するだけです。そうすれば、MySQLは重複を挿入することはできません。あなたはインテリジェントな何かをしたい場合に挿入する前にselectを実行する必要があるかもしれませんが、住所構成要素の空白/句読点の計算のように。 – DaveRandom
こんにちは、このデータは既存のデスクトップクライアントはクライアントからのデータをエクスポートしてインポートするだけなので、インポートする主キーはなく、クライアント管理ソフトウェアのフィールドだけがインポートされます。 – user1148760
PKである必要はなく、ユニークなインデックスだけです。 2つは同義ではなく、互いに排他的ではありません。 – DaveRandom