如何在MySQL中每X个月返回date=now的记录?

如何在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

我有一个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  | 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请参见