2016-05-02 3 views
-2

私はstartdate(datetime)とhas_started(boolean)の2つの列を持つテーブルを持っています。日付に基づいて自動的に値を更新する方法はありますか?

ユーザは、任意の時点でこの日付に与えることができます。 startdateが今日の日付よりも遅くなると、自動的にhas_startedを更新する方法はありますか?スクリプトなんか?ありがとう!

+0

あなたはSTARTDATEが今日以前の場合has_startedが真でなければなりません意味ですか? – jarlh

+1

なぜ列があるのですか?オンザフライで確認できます –

+0

そのような時間依存データを保存することは、一般的には悪い考えです。なぜなら、開始されていないものが翌日に開始される可能性があるからです。代わりに常に最新のhas_startedを返すビューを作成してください! – jarlh

答えて

1

私はあなたがビューを使用することを示唆している:あなたはビューを照会した場合にアクセスしたとき

create view v_table as 
    select t.*, 
      (startdate <= curdate() then 1 else 0 end) as has_started 
    from table t; 

has_started列が更新されます。値はデータベースに格納する必要はありません。

(注:時間のコンポーネントがある場合、あなたはnow()代わりのcurdate()を使用することができます。)

+0

私が正しく理解している場合、ビューはyesのテーブルに対してクエリが実行されたときにのみ実行されますか?ビューをスケジュールする方法はありますか? – lot

+1

@lot、ビューから選択するとhas_startedの値は "計算されます"。値はどこにも格納されません。 – jarlh

関連する問題