2012-07-11 24 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;