3

我有一个 cron 每天午夜后运行一些 php 和一些 mysql。我想带所有注册用户(访问我的网站)并向他们发送提醒和时事通讯副本。但是,我想从他们注册后每 30 天执行一次。

我曾想过:

SELECT * FROM users
WHERE DATE(DT_stamp) = DATE(NOW() - INTERVAL 30 DAY

但这只会在他们注册后的 30 天内有效,而不是 60 和 90 天。

实际上我想要:

注册后的天数可以被 30 整除

这样每 30 天用户就会在 sql 中被选中。

有人可以帮我制定这个 WHERE 子句吗,我在 mysql where day(date1-date2) divisible 30 中苦苦挣扎

4

3 回答 3

2

DATEDIFF函数以天为单位返回两个日期之间的差,忽略时间:

SELECT * FROM users
WHERE DATEDIFF(DT_stamp, NOW()) % 30 = 0
于 2013-08-19T10:43:29.433 回答
1

或者反过来...

SELECT * FROM users WHERE MOD(DATEDIFF(NOW(),registration_date),30) = 0;
于 2013-08-19T10:47:01.563 回答
1

使用 SQL 模函数MOD()

SELECT * FROM users
WHERE MOD( DATE(DT_stamp) - DATE(NOW()), 30) = 0

在 mysql 中,你也可以使用%操作符,它做同样的事情:

SELECT * FROM users
WHERE (DATE(DT_stamp) - DATE(NOW()) % 30 = 0
于 2013-08-19T10:43:43.360 回答