我有一个包含以下列的MySQL表:
id, month, day, remind_days_before
这是一个简单的循环提醒功能。用户可以输入的例子:“我有一件非常重要的事情在每年4月5日,请提醒是15天前”。这个表中可能有数万个条目。使用这个表,我想每天早上运行一个cron_job,它以电子邮件的形式发送提醒。问题是我不知道如何写这种SQL查询.有可能吗?我只想查询那些将“月”和“日”作为日期介于今天和TODAY+31日之间的行(这是remind_days_before的最大数目)。
我现在正在尝试这样做,但是$end_month给了我和$today_month一样的信息:
$today_month = date('m');
$end_month = date('m', strtotime('+31 days', $today_month));
当+31天日期在下一年或我们有闰年时会发生什么?!
有人能帮我一下吗?
非常感谢。
发布于 2017-02-02 07:37:18
首先,您的字段必须是一个非mysql函数.因此,将月/日替换为计划_月/计划日,因为month
和day
单词是MySQL的函数,如果没有引用,则可能会出现错误。
这是一个有用的查询。我测试过并且工作得很好:
select * from MyTable
/*CHECK CURRENT YEAR*/
where date(concat(year(now()), planning_month, planning_day)) =
date(date_add(now(), interval remind_days_before DAY))
OR
/*CHECK NEXT YEAR*/
date(concat(year(date_add(now(), INTERVAL 1 YEAR)), planning_month, planning_day)) =
date(date_add(now(), interval remind_days_before DAY))
你的,这对我来说也是一个非常有用的问题。
发布于 2017-02-02 07:21:39
两年内都要检查一下:
select *
from your_table
cross join (select year(now()) as current_year, year(now())+1 as next_year) vars
where curdate() + interval remind_days_before day = concat(current_year,'-',month,'-',day)
or curdate() + interval remind_days_before day = concat( next_year,'-',month,'-',day)
https://stackoverflow.com/questions/42005171
复制