我有一个每天运行一次的 PHP cron,我需要从 tableA 中获取与本月的天数(即:5 号)匹配的记录,但仅每 X 个月一次。
每个表A的记录作为tag_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 来确定今天是否是具有匹配 tag_id 的记录的正确间隔日并返回记录。今天(1 月 5 日),查询将返回所有 4 条记录。
我不是要找人写查询,我只是想不通如何操作日期数据以使其像这样工作。
我开始考虑与 Modulo 相关的事情并确保它的 == 0 基于 tableB.months
这几乎可以完成工作:
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())
关于mysql - 如何在 MySQL 中每 X 个月返回日期 = 现在的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48630151/