MySQL命令由CASE提供

时间:2017-05-27 11:10:18

标签: mysql sql

我无法让它对我有用。

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

(其余的但它没有按照A-Z的名字排序,但它显示我认为是id)

那么如何使其余的结果由cl.name ASC命令?

3 个答案:

答案 0 :(得分: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的记录无效,因为这些记录的名称始终相同。 / p>

答案 1 :(得分:0)

在MySQL中,如果您愿意,可以使用field()函数:

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

参数的顺序相反,因为field()在找不到字符串时默认为0。

答案 2 :(得分:0)

您可以像这样更改ORDER BY子句。

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