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。如果是季度、月、周或日,同样的事情。

有没有办法做到这一点,或者有解决方法吗?也许可以更改的列类型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 回答