2013-08-24 25 views
2

我有一个SQL表,我排序过期时间这是一个Unix时间戳,如果没有过期时间,我只是将其设置为0,我遇到的问题是当我在ASC中排序此列(因此过期)0到期的行首先显示,有没有办法让他们最后显示?如何排序SQL查询字段与最后一个零?

下面是一个例子查询:

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 

回答

7

的simpliest方式,布尔运算。

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 
+0

还没见过这样的东西。你能解释更多吗? –

+0

嗯伟大的工作:ð谢谢 – NaughtySquid

+0

@SayemAhmed现在有道理吗? ':)' –