MySQL中按LIKE匹配条件组合排序的两种实现咨询
MySQL实现自定义条件匹配优先级排序
完全可以实现这两种自定义排序规则,核心是利用ORDER BY子句结合条件表达式或CASE语句定义排序优先级。
第一种排序规则:同时满足两个条件 → 仅满足第一个条件 → 仅满足第二个条件
用CASE语句可以直观划分排序分组:
SELECT * FROM problem WHERE `type` LIKE '%river%' OR `description` LIKE '%accident%' ORDER BY CASE -- 同时匹配两个条件的记录排最前 WHEN `type` LIKE '%river%' AND `description` LIKE '%accident%' THEN 1 -- 仅匹配第一个条件的记录次之 WHEN `type` LIKE '%river%' THEN 2 -- 仅匹配第二个条件的记录最后 ELSE 3 END;
也可以利用MySQL布尔表达式的数值特性简化(布尔值为真返回1,假返回0):
SELECT * FROM problem WHERE `type` LIKE '%river%' OR `description` LIKE '%accident%' ORDER BY -- 匹配条件的数量越多值越大,DESC让多匹配的排前面 (`type` LIKE '%river%') + (`description` LIKE '%accident%') DESC, -- 确保仅匹配第一个条件的排在仅匹配第二个的前面 (`type` LIKE '%river%') DESC;
第二种排序规则:仅满足第一个条件 → 仅满足第二个条件 → 同时满足两个条件
通过CASE语句精准控制分组顺序:
SELECT * FROM problem WHERE `type` LIKE '%river%' OR `description` LIKE '%accident%' ORDER BY CASE -- 仅匹配第一个条件的记录排最前 WHEN `type` LIKE '%river%' AND NOT `description` LIKE '%accident%' THEN 1 -- 仅匹配第二个条件的记录次之 WHEN NOT `type` LIKE '%river%' AND `description` LIKE '%accident%' THEN 2 -- 同时匹配两个条件的记录最后 ELSE 3 END;
原理说明
ORDER BY支持使用计算表达式或CASE语句返回的数值排序,MySQL会按数值从小到大排列记录,通过给不同匹配组分配不同优先级数值,就能实现自定义排序逻辑。
内容的提问来源于stack exchange,提问作者Muhib Al Hasan
相关产品推荐
相关产品推荐

