2017/11/10 数据库 No Comments mysql多条件模糊查询搜索结果优先按最佳匹配度排序 首先,我们需了解下mysql的locate函数: LOCATE(substr,str):返回字符串str第一次出现的子串substr的位置; LOCATE(substr,str,pos):返回第一次出现在字符串str的子串substr的位置,从位置pos开始。substr不在str中,则返回0。 SQL示例 - 搜索结果按关键词'充电'匹配度优先排序: ```sql SELECT id, title, title_spell, LOCATE("贡院", housename) AS sort_index FROM `xa_house` WHERE `status` = 1 AND ( ( `title` LIKE '%未来%' OR `title` LIKE '%weilai%' ) OR ( `title_spell` LIKE '%未来%' OR `title_spell` LIKE '%weilai%' ) ) ORDER BY `sort_index` DESC, `sellstatus` DESC LIMIT 10 ``` 有时我们不期望关键词较少时就主动干预排序,如: 当用户输入关键词长度大于或等于两个中文汉字时,我们对搜索结果按关键词匹配度优先排序: SQL示例: ```sql SELECT id, title, title_spell, CASE WHEN LENGTH('未来') > 5 THEN //一个汉字是 3 个字节,一个数字或字母是一个字节(UTF8) LOCATE('未来', title) END AS sort_index FROM `xa_house` WHERE `status` = 1 AND ( ( `title` LIKE '%未来%' OR `title` LIKE '%weilai%' ) OR ( `title_spell` LIKE '%未来%' OR `title_spell` LIKE '%weilai%' ) ) ORDER BY `sort_index` DESC, `sellstatus` DESC LIMIT 10 ``` 本文最后更新于 2019-12-03 12:08:53 并被添加「sql排序」标签,已有 3586 位童鞋阅读过。 本文作者:未来往事 本文链接:https://felixway.cn/post/669.html 本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处 相关文章 按最接近当前时间排序 mysql sql查询
此处评论已关闭