mysql 模糊查询排序_mysql多条件模糊查询搜索结果优先按最佳匹配度排序

本文介绍了如何在MySQL中进行模糊查询并按照最佳匹配度排序。通过使用LOCATE函数和CASE语句,实现了当用户输入关键词长度大于等于两个中文汉字时,搜索结果优先按关键词匹配度排序。示例SQL查询展示了具体的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,我们需了解下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排序」标签,已有 1411 位童鞋阅读过。

本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处

相关文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值