每2周发票一次。最佳做法

时间:2013-01-06 13:15:22

标签: php sql

我正在为我的应用程序开发发票系统。我想每两周向用户开具发票。每周都有一个cronjob,检查用户是否收到发票。但是它给了我一些错误,因为这是一个新的一年,即使他们在一周前拿到发票,系统也会给某人发票。

这是我的疑问:

SELECT * 
FROM   user 
WHERE  DAY(registered) = DAY(DATE_SUB(CURDATE(), INTERVAL 2 WEEK))
 OR    DAY(registered) = DAY(NOW()) AND registered != CURRENT_DATE()

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以尝试此操作 - (代码经过测试)Demo

SELECT * FROM user WHERE registered > CURRENT_DATE() AND 
MOD((FLOOR( DATEDIFF( now( ) , `registered` ))),14) = 0                          

答案 1 :(得分:0)

MySQL中的day函数返回月中的某一天。当时间段跨越月份边界时,您的查询显然会出现问题。

我想你想要这种形式的逻辑:

SELECT * 
FROM   user 
WHERE  registered >= DATE_SUB(CURDATE(), INTERVAL 2 WEEK)) and
       registered < curdate()

(如果您希望开具当前日期,请<=。)

我不知道这是做什么的:

 OR    DAY(registered) = DAY(NOW()) AND registered != CURRENT_DATE()

如果已注册和now()的月份相同,则注册应为当前日期。 now()curdate()之间的唯一区别是前者包含时间戳。我还要说,在同一个查询中混合使用三种不同方式获取相同日期是不好的做法,即使它们是等效的。