mysql结果的复杂排序

时间:2013-12-31 00:46:41

标签: mysql sorting

我想知道是否有可能对结果进行排序,以便如果一个列包含一个特定的单词('misc'),它会在最后出现?

当前查询:

select * from table order by name asc

目前的结果:

banjo
guitar
miscproduct1
miscproduct2
piano

伪代码:

select * from table order by name asc, 
except if name like '%misc%' then sort it last

伪结果:

banjo
guitar
piano
miscproduct1
miscproduct2

这可能吗?

2 个答案:

答案 0 :(得分:0)

您可以使用LOCATE()作为第一个排序参数:

ORDER BY LOCATE('misc', name), name;

如果在主题中找不到搜索字符串,则LOCATE()函数返回0,如果找到则生成正整数。

要标准化包含搜索的主题的排序,您可以将其与LEAST()结合使用:

ORDER BY LEAST(LOCATE('misc', name), 1), name;

答案 1 :(得分:-1)

您可以在ORDER BY子句中使用CASE。

SELECT colName
FROM table
ORDER BY
  CASE WHEN colName LIKE 'misc%' 
    THEN concat('zzz',colName) 
    ELSE colName 
  END

演示:http://sqlfiddle.com/#!2/6e08c/7