0

時限イベントをデータベースに保存しました。これらのイベントは、年次、四半期ごと、月次、週次、および毎日です。そこで、イベントのタイプを格納するテーブルを追加しました。

ここで、今日実行する必要があるイベントのみを選択したいと思います。そのため、イベントの開始日を選択し、時刻 (YEAR、QUARTER など) を追加して、その日付が今日の日付かどうかを確認します。

これは where ステートメントになります。

WHERE (
    DATEDIFF(NOW(),
        DATE_ADD(
            IFNULL(
                timer.last_trigger,
                timer.start_date
            ), 
            INTERVAL 1 timer.period_type
         )
    )
) = 0 

クエリは、次の箇所で中断されます。

INTERVAL 1 timer.period_type

それは次のようなものでなければならないからです:

INTERVAL 1 YEAR

timer.period_typeしたがって、値'YEAR'を含む「変数」を定義済みの mysql varに変換したいと考えていますYEAR。また、QUARTER、MONTH、WEEK、DAY の場合も同様です。

これを行う方法はありますか、または回避策はありますか? の列タイプを変更することは可能timer.period_typeでしょうか?PHP でデータのループを防止したい。

4

1 に答える 1

1

確かに、回避策がありますCASE。たとえば、次のようなステートメントを使用できます。

SELECT BLA-BLA-BLA
/*MORE CODE HERE*/

WHERE (
  DATEDIFF(NOW(),
    CASE timer.period_type 
    WHEN 'YEAR' THEN 
      DATE_ADD(IFNULL(timer.last_trigger,timer.start_date), INTERVAL 1 YEAR)
    WHEN 'MONTH' THEN
      DATE_ADD(IFNULL(timer.last_trigger,timer.start_date), INTERVAL 1 MONTH)
    WHEN 'WEEK' THEN
      DATE_ADD(IFNULL(timer.last_trigger,timer.start_date), INTERVAL 1 WEEK)
    WHEN 'DAY' THEN
      DATE_ADD(IFNULL(timer.last_trigger,timer.start_date), INTERVAL 1 DAY)
    END
  )
)= 0 
于 2012-09-25T11:22:11.137 に答える