SQLite如何优先排序WHERE子句中name匹配结果,再处理keyword匹配项
解决方法
你可以在ORDER BY子句中通过条件判断给不同匹配类型的记录分配排序优先级,即可实现需求。另外注意你原查询语句中字段名书写错误,表中字段为keywords(复数),原语句写的keyword会触发字段不存在的报错。
修正后的查询语句如下:
SELECT * FROM users WHERE name LIKE '%Kevin%' OR keywords LIKE '%Kevin%' ORDER BY -- 第一排序规则:name匹配的记录优先级更高,排在最前 CASE WHEN name LIKE '%Kevin%' THEN 1 ELSE 2 END ASC, -- 第二排序规则:name匹配的分组内按name升序排列,不影响后面仅keywords匹配的分组 name ASC, -- 第三排序规则:所有分组内都按weight降序排列 weight DESC;
排序逻辑说明
- 首先通过
CASE WHEN为每行生成隐形排序权重:匹配name的记录权重为1,仅匹配keywords的记录权重为2,按权重升序排列后,所有name匹配的记录会自动排在最前面 - 权重相同的分组内才会执行后续排序规则:因此
name ASC只会作用于name匹配的分组,不会打乱后面仅keywords匹配的分组顺序 - 最后统一按
weight DESC排序,完全符合你的规则要求
内容的提问来源于stack exchange,提问作者Mohammad Hamdan
相关产品推荐
相关产品推荐

