0

我目前有点麻烦。我正在尝试实施的系统是一个“回调”系统,它将针对将在指定日期弹出系统的客户设置回调。

其中一项功能是重复发生的回调。这两个选项是每月和每年。我的年度工作正常:

SELECT * FROM `callbacks` WHERE (
-- Yearly Callbacks
(DAYOFYEAR(`date_callback`) = DAYOFYEAR(NOW()) AND `occurs` = 'yearly') OR

-- Other Callbacks For Today
(DATE(`date_callback`) = DATE(NOW())))

但是我无法想象如何检查每月的回调是否到期。它应该只在列表中每 30 天出现一次(使用上述查询。)我正在使用DAYOFMONTH,但我意识到如果31st为每月回调。

因此,如果设置了一个March 3rd 2013并设置为 montly,则它应该出现在查询结果中,如果日期是:

  • March 3rd 2013
  • April 1st 2013
  • May 1st 2013
  • May 31st 2013
  • June 30th 2013

等等。以前有没有人处理过这个问题?

4

1 回答 1

1

我会考虑使用间隔,比如

. . . (DATE_ADD(现在(),间隔 1 个月))。. .

另见这篇文章。

或者 - 你可以试试(伪代码)

now() - pre_saved_date % 30 (module of 30)

对于 % - 使用 MOD 函数,例如

select MOD(2, 3);
select 3 % 2;
于 2013-04-02T09:43:59.573 回答