我有一个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
答案 0 :(得分: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