我有一个包含产品名称的列的表。
我想按产品名称升序排序,但我想要的产品名称包含"附件"最后排序。
如何做到这一点?
答案 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%'
是一个布尔表达式,它返回0
或1
,因此所有不匹配的行都将返回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子句,但对于这个例子,我只选择所有内容