0

2 つの週番号の間のすべてのレコードを取得する必要があります。これは私が現在使用しているクエリです:

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

クエリは非常にうまく機能し、指定された 2 週間の間のすべてのレコードを返します。ただし、クエリの < 末尾に 16 などを追加すると。MySQL は、現在の週 (42) に 16 週を追加する必要があると解釈します。つまり、16 + 42 = 58 です。これはまさにそれがどうあるべきかです。

問題は、2 つの値の間のすべてのレコードを検索したい場合で、上記のようになる場合です。次のようになります。

> 42 かつ < 16 のすべてのレコードを取得します。これは意味がなく、明らかに何も返されません。

私の記録には年があるので、それが何年かはわかります。私は次のようなことを考えていました。その週が来年の場合、値に 52 を追加します。ただし、毎年 52 週あるわけではないため、これは信頼できません。

どうすればいいですか?

提案/解決策はありますか?

4

1 に答える 1

0

@Strawberry のコメントは正しい軌道に乗っているようです。

Strawberry の DATE_ADD() 関数の省略を修正しました。さらに、YEARWEEK() 関数の結果と一致するように計画週の値を調整する必要があります。

例えば:

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                  

これがうまくいかない場合は、質問にさらに説明が必要な場合があります。

于 2013-10-18T18:24:15.060 に答える