データ更新時に、元データを別カラムに追記録していく(際の注意点も)
CONCAT関数が使える
mysql> UPDATE tbl SET status='NG', up_time = NOW(), up_time_log = CONCAT(IFNULL(up_time_log,''),CONCAT(',',up_time)) WHERE id = ?
例えば、上記SQLのように更新時間をup_time_logカラムに全て残しておきたい場合(ログデータを取るほどでもない)
注意しておきたいのは、UPDATEが左から順次実行されて拾っていくこと
分かり易いのが、次の例で
mysql> UPDATE data SET price=price-1000, discount_rate=(price-1000)/price;
割引きした値段と、元値の割引率をセットしようとしても、割引率セットの前に既にpriceは1000円引かれているので、正しい値が入りません。
よって
オリジナルの値を変更する処理が入る場合は、それを一番最後に持ってくるのが鉄則
mysql> UPDATE data SET discount_rate=(price-1000)/price, price=price-1000;
なので、最初のSQLも
mysql> UPDATE tbl SET status='NG', up_time_log = CONCAT(IFNULL(up_time_log,''),CONCAT(',',up_time)), up_time = NOW() WHERE id = ?
となります。