0

csvファイルのすべての行と列をレコードとしてmysqlテーブルにインポートすることを目的としたこのphpコードがあります。csv から「import_items」という名前の mysql テーブルに正常に挿入されますが、インポートをやり直すと、重複したレコードが挿入されます。私が必要とするのは、テーブル名にIF ITEM EXISTSをチェックする必要があるクエリ更新をどこに合わせるかです->更新値、IF NOT EXISTS ..レコードを挿入してください!

これが私のコードです:

<form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

File to import:<br />

<input size='30' type='file' name='filename'>

<input type="submit" name="submit" value="Upload"></form>



<?php 
require_once('connect_db.php');

   //Upload File 
    if (isset($_POST['submit'])) { 
    if (is_uploaded_file($_FILES['filename']['tmp_name'])) { 


    //Import uploaded file to Database 
    $row = 1; 
    $handle = fopen($_FILES['filename']['tmp_name'], "r"); 


    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 

              //Update Database Values 

        $import="insert into import_items (item_no,qty,actual_price,discount_price,difference_price,date) VALUES('".mysql_real_escape_string($data[0])."', '".mysql_real_escape_string($data[1])."', '".mysql_real_escape_string($data[2])."', '".mysql_real_escape_string($data[3])."', '".mysql_real_escape_string($data[4])."', '".$date = date('Y-m-d')."')"; 

        mysql_query($import) or die(mysql_error()); 

    } 



    fclose($handle); 
     }
} 
    ?>

ありがとうございました

4

3 に答える 3

2

INSERT INTO ... ON DUPLICATE KEY UPDATE ...構文を確認してください。ああ、テーブルに主キーがあることを確認してください。ほとんどの場合、それは良い考えです。

于 2012-09-18T14:36:42.120 に答える
0

MySQL には、既存の行をチェックし、存在しない場合にのみ挿入するステートメントがあります。使用する

REPLACE INTO import_items...

INSERT INTO の代わりに。それ以外の構文は同じです。

このステートメントは、テーブルの主キーによって重複をチェックします。キーが存在しない場合は、行が挿入されます。キーが存在する場合、行の他のフィールドが更新されます。最初に SELECT を実行し、次に分岐して UPDATE または INSERT を実行するのと同じです。

于 2012-09-18T14:35:29.767 に答える
0

テーブル スキーマを共有する必要があります。重複を強制したくない列全体に適切なキーがない場合、REPLACE INTOorの使用は機能しません。INSERT ... ON DUPLICATE KEY UPDATEもう 1 つの簡単な方法 (テーブルの重複を排除したもの) は、重複を防ぎたい列に一意のキーを配置することです。

于 2012-09-18T14:44:21.553 に答える