アプリ版:「スタンプのみでお礼する」機能のリリースについて

targetのデータが変わった・更新されたときに、update_dayをその日時に更新したいと考えています。

フィールドは、field_1, field_2, target, field_4, field_5, update_day, new_day

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

field_1=int型、primary key

field_2=varchar型、

target=float型(7.3)

field_4=boolean型

field_5=text型

update_day=timestamp型、NULL、 default CURRENT_TIMESTAMP、 on update CURRENT_TIMESTAMP

new_day=timestamp型、NOT NULL、 default '0000-00-00 00:00:00'

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

target以外のフィールドのデータが更新されたときにもupdate_dayが更新されてしまいます。

■field_1, field_2, field_4, field_5

■target, update_day, new_day

とテーブルを分けるしか方法がありませんか???
ぐっちゃりしてしまうため極力テーブルを分けたくありません。

A 回答 (2件)

現在on update句で行っている部分をUPDATEトリガーで行うようにすれば実現は可能かと思います。


UPDATEトリガーの中では、target列の更新前と後の値を比較して違ったら更新日時を更新するというロジックを組めばよいでしょう。

ちなみにこんな感じになると思います。
BEGIN
IF NEW.target != OLD.target THEN SET NEW.update_day = now(); END IF;
END

「MySQL UPDATEトリガー」などで検索すれば用例はたくさんありますので、試してみてください。
    • good
    • 0
この回答へのお礼

有難うございます。update_dayをtimestamp型のままで、
・default CURRENT_TIMESTAMP
・on update CURRENT_TIMESTAMP
こちらをなくしました。それで思うようにいきました。

容量が少ないのでtimestamp型を使っていますが、datetime型の方がよいですか。

お礼日時:2012/06/28 23:50

TIMESTAMP型の範囲は2037年までだったと思います。

(64bit環境でもそうなのかは確認していません)
あとはDATETIME型にした場合に既存の日数計算等のコーディングに影響がないかどうか等も考慮して決めればよいかと思います。
    • good
    • 0
この回答へのお礼

分かりました。有難うございました。

お礼日時:2012/07/02 14:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!