2017-05-27 146 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