INSERT or UPDATE ?

今日は珍しく、TIPSの紹介。


table1 ( code(PK) , value );
このようなテーブル(もちろん関連テーブルも存在する)があるとします。

field1が外部の主キーを参考にしているケース。
付加的な情報を格納する場合や、対照表や対応表を処理する場合を想定すると、よくこういうコードをみます。

$sql = "select count(*) from table1 where code = 'a01'";

結果を取得して、存在チェック(当然他の方法でチェックしてもよい)

if( 存在すれば ){

 $sql = "update table1 set value = 'bb' where code = 'a01'";

} else {

 $sql = "insert into table1 values ('a01','bb')";

}
 :
この後実行処理に入る。


まあ、動作チェックはしてないのですが、ニュアンスはわかるでしょう。
これは、以下の一行でOKです。
sql = "replace into table1 ('a01','bb')";


便利なフレームワーク等が多々あるとはいえ、社内未検証、サーバー環境依存などで利用できない案件も多々あるのは事実。
小さな案件ではこういう小技はうまく活用して、コードの省力化を行っていきましょう。
(もちろんケースバイケースで!将来的に他のDBに置き換えが想定される場合は、つかわない方がよいでしょう。)
PEAR::DBのautoPrepareと併用できれ0さらにば楽なんだけどなぁ。。。