在我的一个 Web 应用程序(在 PHP 和 MySQL 中)中有一个用户事件提醒。用户可以添加下一个提醒日期并设置重复间隔(即仅一次、3 个月、6 个月和每年)。将其保存在表格中
id | emp_id | alert_date | repeat_interval
--------+----------------+-----------------------+----------------------
1 | 124 | 2014-05-02 00:00:00 | 3
--------+----------------+-----------------------+----------------------
2 | 123 | 2014-05-02 00:00:00 | 12
--------+----------------+-----------------------+----------------------
3 | 122 | 2014-02-02 00:00:00 | 6
--------+----------------+-----------------------+----------------------
4 | 121 | 2014-07-02 00:00:00 | 0
--------+----------------+-----------------------+----------------------
5 | 124 | 2014-05-02 00:00:00 | 6
--------+----------------+-----------------------+----------------------
6 | 125 | 2014-08-02 00:00:00 | 6
--------+----------------+-----------------------+----------------------
7 | 126 | 2014-06-02 00:00:00 | 12
--------+----------------+-----------------------+----------------------
8 | 127 | 2014-05-02 00:00:00 | 3
------------------------------------------------------------------------
repeat_interval 的值为
0 - One time event
3 - Every 3 months
6 - Every 6 months
12 - Yearly
现在我有一个每天早上运行的“cronjob”,用于搜索事件并向用户发送警报。我有以下 MySQL 查询
SELECT *
FROM alerts as al
WHERE date(al.alert_date) = DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY);
这将返回 tmrw 的警报,我可以用它发送邮件。但我的问题是如何也采取这些间隔?
即如果提醒日期是 01-05-2013 并且设置重复 3 个月然后需要发送邮件 01-05-2013 间隔3个月
实际上这是达到此目的的正确方法吗?或者我需要更改表格?
谁能给我个主意? 提前致谢
最佳答案
你可以用下一个应该提醒的日期更新 alert_date。 因此,每次执行 cronjob 时,更新所有具有 repeat_interval != 0 的警报,其中 alert_date + repeat_interval 月数。我猜你可以使用 DATE_ADD() 函数来计算 att 个月:
UPDATE alerts SET alert_date = DATE_ADD(alert_date, INTERVAL repeat_interval MONTHS) WHERE repeat_interval != 0
如果您需要存储原始日期,只需创建一个额外的列 next_alert,然后更新该日期即可。
关于php - MySQL 日期重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17403137/