1

if ステートメントに基づいて MySQL ステートメントを作成しようとしています。

私がやりたいことは次のとおりです。項目が 2 週間以内に期限切れになるかどうか、または期限が過ぎているかどうかに基づいて行を収集するクエリが必要です。

これは私がこれまでに持っているものです:

select
  t_id,
  firstName, 
  lastName, 
  checkTime,
  due
from (checkOut join People)
where checkOut.p_id = People.p_id
order by due IF(DATE(NOW()-checkOut.due) <= 2 WEEK);

MySQL は、IF ステートメントの近くに構文エラーがあると述べています (MySQL での条件ステートメントの記述に慣れていないので、驚くことではありません)。

もう 1 つの質問は、MySQL が負の日付を生成するかどうか (つまり、アイテムの期限が過ぎたことを示すため) に関するものです。前もって感謝します。

4

2 に答える 2

1

をそのまま使用することはIFできません。ポータブルな代替手段は、 に a を配置して、条件が一致する場所に aCASEを割り当てORDER BY、一致しない場合はその後にソートすることです。010

select
  t_id,
  firstName, 
  lastName, 
  checkTime,
  due
from 
  checkOut 
  join People ON checkOut.p_id = People.p_id
order by 
  /* Use DATE_SUB() */
  /* This will sort those not yet past due ahead of those already past due. 
     If this is the opposite of what you want, switch the 0 and 1 */
  CASE WHEN DATE_SUB(CURDATE(), INTERVAL 2 WEEK) <= checkOut.due THEN 0 ELSE 1 END;

WHERE句を句に変更することにより、暗黙的な結合を明示的な結合に変換したことに注意してくださいON

于 2012-11-04T21:15:47.043 に答える
1

あなたが探しているのはこれだと思います、

SELECT t_id, 
       firstname, 
       lastname, 
       checktime, 
       due 
FROM   checkout 
       JOIN people 
         ON checkout.p_id = people.p_id 
ORDER  BY CASE 
            WHEN ( Now() - INTERVAL 2 week ) <= checkout.due THEN 0 
            ELSE 1 
          END, 
          due 
于 2012-11-04T21:16:10.537 に答える