mysql中的高级排序

mysql中的高级排序,mysql,sorting,Mysql,Sorting,我有一个包含productnames的列的表 我想按产品名称升序排序,但我希望包含“附件”一词的产品名称排在最后 如何做到这一点?这是一种常见的方法: SELECT * FROM my_table ORDER BY product_name LIKE '%accessory%', product_name 或 子句product\u name(如“%association%”是一个布尔表达式,返回0或1),因此所有不匹配的行都将返回0,并在排序顺序中显示得更早 LOCATE('accessor

我有一个包含productnames的列的表

我想按产品名称升序排序,但我希望包含“附件”一词的产品名称排在最后


如何做到这一点?

这是一种常见的方法:

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

子句
product\u name(如“%association%”
是一个布尔表达式,返回
0
1
),因此所有不匹配的行都将返回
0
,并在排序顺序中显示得更早

LOCATE('accessority',product_name)
的工作原理类似,但对于不匹配或第一个匹配的整数位置,将返回
0
。在这种情况下,两者之间没有什么区别

    SELECT *, 
(CASE WHEN `productname` LIKE '%accessory%' THEN 1 ELSE 0 END) AS `relevance`
     FROM `tablename` ORDER BY `relevance`, `productname` ASC
您可以根据mysql中的条件使用


显然,您可以将WHERE子句添加到ORDER BY语句的前面,但在本例中,我只需选择所有内容,ORDER BY接受一个逗号分隔的表达式列表。您不应该先按
LOCATE('附件',名称)
排序吗?@RocketHazmat,是的!非常感谢。
    SELECT *, 
(CASE WHEN `productname` LIKE '%accessory%' THEN 1 ELSE 0 END) AS `relevance`
     FROM `tablename` ORDER BY `relevance`, `productname` ASC