我有一个包含以下列的MySQL表:
id, month, day, remind_days_before
它是一个简单的重复提醒功能。用户可以输入例如:"我每年4月5日都有一件非常重要的事情,请提前15天提醒#34;此表中可能有数万个条目。使用这个表我想每天早上运行一个cron_job,它以电子邮件的形式发送这个提醒。问题是我不知道如何编写这种SQL查询......它甚至可能吗?我想只查询那些"月"和" day"由于DATE介于今天和今天+31天之间(这是remind_days_before的最大数量)。
我现在正在尝试这个,但是$ end_month给了我与$ today_month相同的内容:
$today_month = date('m');
$end_month = date('m', strtotime('+31 days', $today_month));
当+ 31天DATE在下一年或我们有闰年时会发生什么?!
有人可以帮助我吗?
非常感谢。
答案 0 :(得分:1)
首先,您的字段必须是no-mysql函数。
所以用planning_month / planning_day替换月/日,因为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))
<强> Live Example 强>
你的,这对我来说也是一个非常有用的问题
答案 1 :(得分:0)
请检查这两年:
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)