如何使用last last的字段对sql查询进行排序?

Nau*_*uid 2 php mysql

我有一个sql表,我按照过期时间排序,这是一个unix时间戳,如果没有过期时间我只是将其设置为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
Run Code Online (Sandbox Code Playgroud)

Joh*_*Woo 7

最简单的方法,布尔算术.

ORDER BY s.expires = 0, s.expires
Run Code Online (Sandbox Code Playgroud)

但是,这仅适用于mysql.

当的值s.expires0,则

 0 = 0 --> returns true or 1
Run Code Online (Sandbox Code Playgroud)

否则,如果不等于零,那么就说吧 1

 1 = 0 --> returns false or 0
Run Code Online (Sandbox Code Playgroud)

如果你想在其他RDBMS上工作,请使用 CASE

 ORDER BY CASE WHEN s.expires = 0 THEN 1 ELSE 0 END, s.expires
Run Code Online (Sandbox Code Playgroud)