php - MySQL 日期重复

标签 php mysql sql date

在我的一个 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/

相关文章:

php - mysql获取有效日期不是0000-00-00 00 :00:00的记录

php - 使用 PHP 的 exec() 函数重定向 shell 命令的输出

php - 从字符串是可变的字符串中提取字符串

mysql - PHP 从 3 个表中选择

mysql - 在单个查询中更新 2 个表中的随机记录

sql - 禁用锁升级的缺点

php - 如何在php中打印HTML代码

mysql - 使用条件将数据插入 hive 时出错

mysql - SQL求和整数并计算小数

sql - 使用 IsolationLevel.Snapshot 但数据库仍处于锁定状态