我需要获得两周数字之间的所有记录。这是我现在正在使用的查询:
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周。
我该怎么做?
有任何建议/解决方案吗?
答案 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
如果这不起作用,那么您的问题可能需要进一步澄清。