如何在MySQL中每X个月返回date=now的记录?
我有一个PHP cron,它每天运行一次,我需要从tableA中获取与本月的日数(即:第5天)匹配的记录,但只能每X个月运行一次 每个表a的记录作为标记id,该标记id与表B中保存X个月间隔的a记录相关: 表如何在MySQL中每X个月返回date=now的记录?,mysql,Mysql,我有一个PHP cron,它每天运行一次,我需要从tableA中获取与本月的日数(即:第5天)匹配的记录,但只能每X个月运行一次 每个表a的记录作为标记id,该标记id与表B中保存X个月间隔的a记录相关: 表 id | title | tag_id | date --------------------------- 1 | foo | 1 | 2018-01-05 00:00:00 2 | bar | 1 | 2018-12-05 19:00:00 3 | c
id | title | tag_id | date
---------------------------
1 | foo | 1 | 2018-01-05 00:00:00
2 | bar | 1 | 2018-12-05 19:00:00
3 | cat | 2 | 2017-11-05 10:00:00
4 | car | 3 | 2016-08-05 11:11:11
表B
id | label | months
-------------------
1 | text | 1
2 | anim | 3
3 | veh | 6
tableA.tag_id=tableB.id
对于给定的数据,我想要一个使用tableB.months的查询,以确定今天是否是具有匹配标记id的记录的正确间隔日,并返回记录。对于今天(1月5日),查询将返回所有4条记录
我并不是要求有人来编写查询,我只是不知道如何操纵日期数据使其像这样工作
我开始考虑与模有关的事情,并根据表B确保其==0
这几乎完成了任务:
MOD(DATEDIFF(NOW(), tableA.date), (tableB.months * 30)) = 0.
但这有点奇怪,因为月份的长度不同。使用TIMESTAMPDIFF()
来获得月份的差异。使用DAY()
获取月份的日期:
SELECT *
FROM TableA a
JOIN TableB b
ON b.id = a.tag_id
AND TIMESTAMPDIFF(MONTH, CURDATE(), DATE(a.date)) % b.months = 0
WHERE DAY(a.date) = DAY(NOW())
所以我们可以叫tablebtags@Strawberry是的,目前认为这可能完成任务MOD(DATEDIFF(NOW(),tableA.date),(tableB.months*30))=0请参见