2017-05-27 140 views
0

我無法爲我工作。MySQL通過CASE訂購

ORDER BY cl.name ASC'); 

我必須更改爲:

ORDER BY CASE cl.name WHEN "Nameone" THEN 0 WHEN "Nametwo" THEN 1 ELSE 2 END ASC 

我得到的結果

1. Nameone 
2. Nametwo 

(其餘的,但它不是按名稱從AZ排列,但它顯示我認爲ID)

那麼如何使剩餘結果由cl.name ASC命令?

+0

雙引號「''的意思是字段名,單引號(')的意思是字符串。你需要什麼? –

+0

哪一個順便說一句,你不需要ASC,這是默認的選項。 –

回答

3

只需添加排序,以您的ORDER BY條款的第二個層次:

ORDER BY 
    CASE WHEN cl.name = 'Nameone' THEN 0 
     WHEN cl.name = 'Nametwo' THEN 1 
     ELSE 2 END, 
    cl.name   -- add this sort condition 

注意添加cl.name作爲第二排序條件將對其中名稱爲NameoneNametwo記錄中沒有任何影響,因爲這個名字是這些記錄總是相同的。

0

在MySQL中,你可以使用field()功能,如果你喜歡:

order by field(c1.name, 'Nametwo', 'NameOne') desc, 
     c1.name 

的參數是按相反的順序,因爲如果找不到field()默認爲0的字符串。

0

你可以像這樣改變你的ORDER BY子句。

ORDER BY CASE cl.name WHEN 'Nameone' THEN '0' WHEN 'Nametwo' THEN '1' ELSE CONCAT('2', COALESCE (cl.name,'')) END ASC