INSERT ... ON DUPLICATE KEY Update の条件付き UPDATE
MySQL では、INSERT ... ON DUPLICATE KEY UPDATE ステートメントを使用すると、次のことが可能になります。新しい行を挿入するか、同じ一意のキーを持つ行がすでに存在する場合は既存の行を更新します。ただし、場合によっては、更新部分を条件付きにし、特定の条件が満たされた場合にのみ実行する必要がある場合があります。
残念ながら、WHERE 句は ON DUPLICATE KEY UPDATE 構文ではサポートされていません。この制限を克服するには、UPDATE 句内で IF() 関数を利用します。
IF() 関数は、条件、条件が true の場合に返す値、および条件が true の場合に返す値の 3 つの引数を取ります。条件が false の場合に戻ります。これにより、追加の条件が変更されたかどうかをチェックする条件を指定し、条件に応じて更新する値を設定できます。
たとえば、次のステートメントを考えてみましょう。
INSERT INTO daily_events (created_on, last_event_id, last_event_created_at) VALUES ('2010-01-19', 23, '2010-01-19 10:23:11') ON DUPLICATE KEY UPDATE last_event_id = IF(last_event_created_at < VALUES(last_event_created_at), VALUES(last_event_id), last_event_id);
Inこのステートメントでは、既存の行の last_event_created_at 列が VALUES 句の値よりも前の場合にのみ、last_event_id 列が更新されます。それ以外の場合、last_event_id は変更されないままになります。
以上がMySQL の INSERT ... ON DUPLICATE KEY UPDATE で条件付き更新を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。