获取两周之间的所有记录

时间:2013-10-18 15:45:07

标签: mysql sql

我需要获得两周数字之间的所有记录。这是我现在正在使用的查询:

SELECT huxwz_user_orders . * , huxwz_users.name, huxwz_users.email FROM huxwz_user_orders
LEFT OUTER JOIN huxwz_users ON ( huxwz_user_orders.userid = huxwz_users.id )
WHERE
   (STATUS=3 or STATUS=2)
    AND plannedweek > 0 
    AND plannedweek >= WEEK(DATE_ADD(now(), interval 1 WEEK))
    AND plannedweek < WEEK(DATE_ADD(now(), interval 3 WEEK))
    AND NOT plannedweek=0

查询效果很好,并返回两个提供的周之间的所有记录。 HOWEVER 当我向&lt;添加16时查询结束。 MySQL解释16周应该加到本周(42),所以16 + 42 = 58.由于我们没有58周而且只有52周,所以必须是第六周。这正是它应该做的。

问题是,当我想要查找两个值之间的所有记录时,它确实如上所述。它看起来像这样:

获取所有&gt;的记录42和&lt; 16.这没有任何意义,显然不会返回任何东西。

所以,我的记录有一年,所以我知道它是哪一年。我正在思考一些问题:如果一周是明年,那就加上52。这是不可靠的,因为不是每年都有52周。

我该怎么做?

有任何建议/解决方案吗?

1 个答案:

答案 0 :(得分:0)

看起来@ Strawberry的评论是正确的。

我更正了草莓遗漏了DATE_ADD()函数,另外我们需要调整计划周的值以匹配YEARWEEK()函数的结果。

e.g:

SELECT huxwz_user_orders . * , huxwz_users.name, huxwz_users.email FROM huxwz_user_orders
LEFT OUTER JOIN huxwz_users ON ( huxwz_user_orders.userid = huxwz_users.id )
WHERE
   (STATUS=3 or STATUS=2)
    AND plannedweek > 0 
    AND (YEAR( NOW() ) * 100) + plannedweek >= YEARWEEK( WEEK(DATE_ADD(now(), interval 1 WEEK)), 1)
    AND (YEAR( NOW() ) * 100) + plannedweek < YEARWEEK( WEEK(DATE_ADD(now(), interval 3 WEEK)), 1) 
    AND NOT plannedweek=0                  

如果这不起作用,那么您的问题可能需要进一步澄清。