2012-07-11 30 views
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,使最高号(它的unixtime,所以在未来的最远)出现第一,但我想NULL排名高于任何数字。因此,如果在suspend_expireson中有一行值为NULL,我需要那一行。

我该如何修改查询来做到这一点?

在此先感谢!

回答

2

使用CASE声明中ORDER BY给予较低的恒定值空0比其他行,其提前获得1的1 0种,那么剩下的(1)由suspension_expireson DESC subordered 。

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; 
+1

你实际上可以通过'column is null'来排序,因为它返回一个布尔值,而布尔值是可排序的。不需要案件陈述。 – Jeremy 2012-07-11 19:21:49

0

这将首先对所有NULL值进行排序,然后按降序对非NULL值进行排序。

ORDER BY case when suspension.suspension_expireson is null then 0 else 1 end, suspension.suspension_expireson DESC LIMIT 1;