我创建了一个系统,它将根据用户注册的时间每月计算数据。
我将运行每日cron作业,以抓取所有需要计算信息的用户,我想每天抓取所有用户。
如果用户都注册了2011-01-01
一个简单的查询会发现(如果昨天是句号):
SELECT `user_id`
FROM `table`
WHERE DAY( `date_created` ) = DAY( DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY ) )
如果他们在2011-03-31
上注册,情况会变得更复杂
我可以使用什么查询来确保在2011-04-30
上找到它们?
我猜应该是
SELECT `user_id`
FROM `table`
WHERE
DAY( `date_created` ) = DAY( DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY ) )
OR DAY( DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY ) ) < DAY( `date_created` )
AND LAST_DAY( DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY ) ) = DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY )
这似乎不是很有效,我也不知道它是否会工作(尽管我怀疑它会)。
有一个行之有效的方法吗?或者有更好的方法吗?
您所需要做的就是检查它是否是这个月的第一天,如果是做>=
比较,否则做=
比较。
WHERE IF(DAY(CURRENT_DATE()) = 1,
DAY( `date_created` ) >= DAY(DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY )),
DAY( `date_created` ) = DAY(DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY ))
)
因此在3月1日,它将更新在28日或之后注册的用户(在非闰年)