// データを挿入または更新するSQL文 $sql = "INSERT INTO your_table (id, column1, column2) VALUES (:id, :column1, :column2) ON DUPLICATE KEY UPDATE column1 = VALUES(column1), column2 = VALUES(column2)"; $stmt = $pdo->prepare($sql); // パラメータの設定 $stmt->bindParam(':id', $id); $stmt->bindParam(':column1', $column1); $stmt->bindParam(':column2', $column2);
主キー(またはユニークキー)に基づいて動作します。これは、重複するキーがある場合にUPDATEを実行するためです。したがって、この構文を使用する場合は、必ずしもIDである必要はありませんが、ユニークキーまたは主キーに基づく必要があります。
複数のカラムを組み合わせてユニークキーを作ることは可能ですし、それを使ってINSERT ... ON DUPLICATE KEY UPDATE構文を使用することも可能です。実際、複合ユニークキーを設定すれば、複数カラムの組み合わせに基づいてINSERTまたはUPDATEを行うことができます。
例えば、次のように複合ユニークキーを設定します:
CREATE TABLE your_table ( id INT AUTO_INCREMENT PRIMARY KEY, column1 VARCHAR(255), column2 VARCHAR(255), column3 VARCHAR(255), UNIQUE KEY unique_key (column1, column2) );
このようにテーブルを作成した場合、column1とcolumn2の組み合わせがユニークキーとして機能します。これに基づいてINSERT ... ON DUPLICATE KEY UPDATE構文を使用する例を以下に示します:
// データを挿入または更新するSQL文 $sql = "INSERT INTO your_table (column1, column2, column3) VALUES (:column1, :column2, :column3) ON DUPLICATE KEY UPDATE column3 = VALUES(column3)"; $stmt = $pdo->prepare($sql); // パラメータの設定 $stmt->bindParam(':column1', $column1); $stmt->bindParam(':column2', $column2); $stmt->bindParam(':column3', $column3);
この例では、column1とcolumn2の組み合わせがユニークであるため、重複するデータがある場合にはcolumn3が更新され、重複しない場合には新しいレコードが挿入されます。
この方法なら複数カラムのユニーク性を活かしてデータの挿入および更新ができます。
CREATE TABLE your_table ( id INT AUTO_INCREMENT PRIMARY KEY, column1 VARCHAR(255) NOT NULL, column2 VARCHAR(255) NOT NULL, column3 VARCHAR(255), UNIQUE KEY unique_key (column1, column2) );