マップ配置データをサーバーに保存するにあたり、マップデータがすでにアップロードされていればUpdateし、新規であればinsertする処理を作りたい。
MySQLであればon duplicate key update機能を使う
INSERT INTO data (userid,data,datetime) VALUES(".$db->quote($userid).",".$db->quote($data).",NOW()) ON DUPLICATE KEY UPDATE userid=".$db->quote($userid).",data=".$db->quote($data).",datetime=NOW();"
同じuseridのレコードがあれば、dataとdatetimeのupdateが行われ、新規の場合は、Insertが行われる。
なお、重複チェックの対象であるuseridは、UNIQUEインデックス(かPRIMARY KEY)を指定しておく必要がある。
要するに、同じuseridのレコードは一つしかないという状態になっている。
同様な処理をするのに、以前は、まずselectしてデータがなければInsert。あればUpdateみたいなことをやっていたが、SQL発行が一回で済んで楽。
参考
qiita.com