1

NOT EXISTSlast_insert_id()を 1 つのコードで使用して、次のことを行いたいと考えています。以下のコードは私のニーズを満たしています。 Col1 は一意のキーであり、コードが既に存在する場合はデータを挿入しません。新しい行が挿入されるか、既に存在する場合、コードは常に関連する行の $id を返します。

<?php 
mysql_query(" INSERT table SET col1='data1', col2='data2' ");

$result = mysql_query("SELECT id FROM table WHERE col1='data1' ") ;
while($row = mysql_fetch_array( $result )) { $id=$row['id'];}

header("Location:page.php?id=$id"); 
?>
4

1 に答える 1

0

ここで私の考えを述べさせてください。問題を完全に理解したかどうかはわかりません。

重複キーの更新について

INSERT INTO table (ID, Col1, Col2)
   VALUES (100, value1, value2)
       ON DUPLICATE KEY UPDATE ID = 100; -- or whatever you need

INSERT INTO table (ID, Col1, Col2)
   VALUES (100, value1, value2)
       ON DUPLICATE KEY UPDATE ID = ID; -- this keeps the ID to what ever it was, no change.

存在しません

INSERT INTO funds (ID, Col1, Col2)
    SELECT 100, "value1", "value2"
    FROM dual
    WHERE NOT EXISTS (SELECT 1 
          FROM table 
          WHERE ID = 100
    );

DUALテーブルが参照されていない状況では、ダミーのテーブル名として指定できます。

追加の考え。

に置換

これはINSERT、1 つの重要な例外を除いて、まったく同じように機能します。が見つかった場合duplicate rowは、まずそれを削除してから を実行するINSERTため、エラー メッセージは表示されません。

<?php 
   mysql_query(" REPLACE INTO table SET col1='data1', col2='data2' ");

挿入 無視

これはduplicate errors、通常、アプリケーションが壊れるのを防ぐために、を抑制する方法です。場合によっては、新しい行を挿入しようとして、重複が見つかった場合に問題なく失敗するようにしたい場合があります。

<?php 
   mysql_query(" INSERT IGNORE INTO table SET col1='data1', col2='data2' ");
于 2013-11-24T14:33:33.620 に答える