如何在MySQL中每隔X个月返回日期=现在的记录?

时间:2018-02-05 19:34:43

标签: mysql

我有一个每天运行一次的PHP cron,我需要从tableA中获取记录,这些记录与本月的日期编号(即:第5个)相匹配,但只是每X个月一次。

每个tableA记录为tag_id,它与tableB中保存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

tableB的

id | label | months
-------------------
1  | text  | 1
2  | anim  | 3
3  | veh   | 6

tableA.tag_id = tableB.id

给定数据,我喜欢使用tableB.months查询今天是否是匹配tag_id的记录的正确间隔日并返回记录的查询。对于今天(1月5日),查询将返回所有4条记录。

我没有要求有人写这个查询,我只是不知道如何操纵日期数据让它像这样工作。

我开始考虑与Modulo有关并确保其基于tableB.months的== 0

这几乎完成了这项工作:

MOD(DATEDIFF(NOW(), tableA.date), (tableB.months * 30)) = 0. 

但由于月份不同,这有点古怪。

1 个答案:

答案 0 :(得分: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())