我有一个每天运行一次的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.
但由于月份不同,这有点古怪。
答案 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())