gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 03:18:56 27 4
gpt4 key购买 nike

我有一个每天运行一次的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com