我创建了一个系统,该系统将根据用户注册时间每月计算数据。
我将运行每日一次的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 )
这似乎不是很有效,我也不知道它是否会起作用(尽管我怀疑它确实如此)。
有没有尝试过真正的方法?或者更好的方法吗?
答案 0 :(得分:1)
您需要做的就是检查它是否是本月的第一天,是否进行>=
比较,否则进行=
比较。
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日或之后注册的用户(非闰年)。