MySQL如何让LIKE查询匹配结果优先排序,其余结果紧随其后
MySQL实现LIKE匹配结果优先排序的方案
你当前的查询将LIKE '%Korea%'写在WHERE子句中,会直接过滤所有不匹配的行,因此只能返回South Korea一条结果,这不是排序函数的问题,是过滤逻辑设置错误导致的。另外你原语句的LIKE条件语法有误,匹配字符串需要用单引号包裹,正确写法是LIKE '%Korea%'。
要实现匹配结果优先、其余结果紧随的效果,需要把LIKE匹配逻辑从WHERE过滤条件转移到ORDER BY排序规则中,利用MySQL布尔表达式返回0/1的特性实现排序:
- 匹配到关键词的行,
data LIKE '%Korea%'返回值为1 - 未匹配到关键词的行,返回值为0
按该值倒序排列即可把匹配行放在最前面,后续可追加次级排序规则自定义未匹配行的排列顺序。
符合你需求的查询语句如下:
SELECT * FROM `table` ORDER BY -- 匹配到Korea的行优先排在最前 `data` LIKE '%Korea%' DESC, -- 未匹配行按data字段字母升序排列,刚好符合你给出的预期输出顺序 `data` ASC;
如果你需要同时保留其他过滤条件(比如排除空值行),只需要把对应条件写到WHERE子句中即可,不要把LIKE匹配的逻辑放进去:
SELECT * FROM `table` WHERE `data` IS NOT NULL AND `data` != '' ORDER BY `data` LIKE '%Korea%' DESC, `data` ASC;
内容的提问来源于stack exchange,提问作者june
相关产品推荐
相关产品推荐

