2

UNIXタイムスタンプである有効期限でソートしているSQLテーブルがあります。有効期限がない場合は、それを0に設定しました。問題は、この列をASCでソートするときです(最初に期限が切れます)有効期限が 0 の行が最初に表示されますが、それらを最後に表示する方法はありますか?

クエリの例を次に示します。

SELECT s.`id`, s.`info`, s.`website`, s.`date`, s.`provider_id`, s.`drmfree`, 
       s.`steam`, s.`desura`, s.savings, s.pwyw, s.pounds, s.dollars, s.euros, 
       s.has_screenshot, s.screenshot_filename, s.`expires`, p.`name` 
FROM `game_sales` s 
      LEFT JOIN `game_sales_provider` p 
            ON s.provider_id = p.provider_id   
WHERE s.`accepted` = 1 AND s.provider_id = ? 
ORDER BY s.expires ASC
4

1 に答える 1

7

最も簡単な方法は、ブール演算です。

ORDER BY s.expires = 0, s.expires

ただし、これは mysql でのみ機能します。

の値が のs.expires場合0

 0 = 0 --> returns true or 1

それ以外の場合、ゼロに等しくない場合は、1

 1 = 0 --> returns false or 0

他の RDBMS でも作業したい場合は、CASE

 ORDER BY CASE WHEN s.expires = 0 THEN 1 ELSE 0 END, s.expires
于 2013-08-24T18:05:21.713 に答える