2017-05-27 44 views
3

這裏是結果查詢:排序按倒序除了

SELECT id, name FROM medic WHERE x=z ORDER BY name ASC 

1. Aric 
2. Bodi 
3. Copi 
4. Dori 
5. Edo 
6. Other 
7. Poyo 
8. Quex 
9. Razix 
10. Zika 

什麼最好的,如果我需要顯示「其他」下面的最後的結果是:

1. Aric 
2. Bodi 
3. Copi 
4. Dori 
5. Edo 
7. Poyo 
8. Quex 
9. Razix 
10. Zika 
6. Other 

回答

2

在MySQL中,您可以使用布爾表達式:

ORDER BY (name <> 'Other') DESC, 
     name 

MySQL的對待布爾表達式爲在數值上下文編號,用「1」爲真並且「0」表示假。 (我碰巧喜歡這個約定,並希望其他數據庫也有類似的支持。)在這些情況下,這可以很方便。

+0

但這種可能不會移植到任何其他數據庫(保存MariaDB的)。 –

+0

@TimBiegeleisen。 。 。我通常更喜歡標準的結構(這就是爲什麼你的答案值得讚賞)。這恰好是一個情況下我更喜歡短手,可能是因爲C是我學習的第一語言之一。 –

2

一個選項是使用CASE表達式命令:

SELECT 
    id, 
    name 
FROM medic 
WHERE x=z 
ORDER BY 
    CASE WHEN name <> 'Other' THEN 0 ELSE 1 END, 
    name 
+0

難道那不會把'其他'放在第一位嗎? –

0

要麼使用兩個表達式的ORDER BY子句,或者,我們可以用「高」值來代替我們希望最後的值。

ORDER BY IF(t.name='Other', 'ZZZZZZZ', t.name)