0

私はこのクエリを持っています:

SELECT user.user_id,
       user.user_name,
       user.user_hash,
       suspension.suspension_expireson
FROM   user
       LEFT JOIN suspension
              ON suspension.suspension_user = user.user_id
WHERE  user.user_name = "tester"
ORDER  BY suspension.suspension_expireson DESC
LIMIT  1; 

suspension_expireson最も大きい番号(UNIX時間なので、将来的に最も遠い番号)が最初に表示されるように注文しNULLますが、どの番号よりも上位にランク付けしたいと思います。したがってNULL、suspension_expiresonに値を持つ行がある場合は、それが必要です。

それを行うには、クエリをどのように変更する必要がありますか?

前もって感謝します!

4

2 に答える 2

2

CASEのステートメントを使用して、ORDER BYnullに1を取得する他の行よりも低い定数値を指定します。0は1の前にソートされ、残り(1)は。によってサブオーダーされsuspension_expireson DESCます。

SELECT
  user.user_id, 
  user.user_name, 
  user.user_hash, 
  suspension.suspension_expireson 
FROM 
  user 
  LEFT JOIN suspension ON suspension.suspension_user = user.user_id 
WHERE user.user_name = "Tester" 
ORDER BY
  CASE WHEN suspension_expireson IS NULL THEN 0 ELSE 1 END,
  suspension.suspension_expireson DESC
LIMIT 1;
于 2012-07-11T18:43:49.853 に答える
0

これにより、最初にすべてのNULL値がソートされ、次にNULL以外の値が降順でソートされます。

ORDER BY case when suspension.suspension_expireson is null then 0 else 1 end, suspension.suspension_expireson DESC LIMIT 1;
于 2012-07-11T18:43:28.437 に答える