0

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

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

该查询运行良好,并返回提供的两个星期之间的所有记录。但是,当我将 16 添加到查询的 < 结尾时。MySQL 解释 16 周应该加上当前周(42),所以是 16+42 = 58。由于我们没有 58 周,只有 52 周,所以它必须是第六周。这正是它应该做的。

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

获取所有 > 42 和 < 16 的记录。这没有任何意义,而且它显然不会返回任何内容。

所以,我的记录有一年,所以我知道是哪一年。我在想一些类似的事情:如果一周是明年,则将值加 52。但这是不可靠的,因为并非每年都有 52 周。

我该怎么做?

有什么建议/解决方案吗?

4

1 回答 1

0

It looks like @Strawberry's comment is on the right track.

I corrected Strawberry's omission of the DATE_ADD() function, plus we need to adapt the value of planned week to match the results of the YEARWEEK() function.

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                  

If this doesn't work then your question may need some further clarification.

于 2013-10-18T18:24:15.060 回答