在mysql中进行高级排序

时间:2014-01-21 16:34:29

标签: mysql sorting

我有一个包含产品名称的列的表。

我想按产品名称升序排序,但我想要的产品名称包含"附件"最后排序。

如何做到这一点?

2 个答案:

答案 0 :(得分:4)

这是执行此操作的常用方法:

SELECT * FROM my_table
ORDER BY product_name LIKE '%accessory%', product_name

SELECT * FROM my_table
ORDER BY LOCATE('accessory', product_name), product_name

子句product_name LIKE '%accessory%'是一个布尔表达式,它返回01,因此所有不匹配的行都将返回0,并且会在前面出现排序顺序。

LOCATE('accessory', product_name)的工作方式类似,但会返回0表示不匹配或第一个匹配的整数位置。在这种情况下,两者之间几乎没有差异。

答案 1 :(得分:1)

    SELECT *, 
(CASE WHEN `productname` LIKE '%accessory%' THEN 1 ELSE 0 END) AS `relevance`
     FROM `tablename` ORDER BY `relevance`, `productname` ASC

您可以使用case.

根据mysql中的条件提供相关性

显然你可以在ORDER BY语句之前添加你的WHERE子句,但对于这个例子,我只选择所有内容