MySQL模糊查询多个关键词,查询结果按照匹配关键词的多少来排序

本文介绍了如何在数据库中利用SQL的LIKE和REGEXP操作符进行多关键词模糊搜索,并通过关键词匹配数量对搜索结果进行排序。示例展示了如何结合标题、副标题和标签进行全文搜索,并通过CONCAT_WS函数处理NULL值,确保搜索的准确性。同时,通过权重系统提升匹配更多关键词的文章排名,从而实现高效的信息检索。
摘要由CSDN通过智能技术生成
  • 首先想到的肯定是 LIKE ,关键词是“车”的话
SELECT * FROM article WHERE 
title LIKE "%车%" 
OR subtitle LIKE "%车%" 
OR tag LIKE "%车%"
  • 用一个 LIKE 解决不了的事情就多用几个 LIKE
SELECT * FROM article WHERE 
(
  title LIKE "%车%" 
  OR subtitle LIKE "%车%" 
  OR tag LIKE "%车%" 
) OR (
  title LIKE "%摩托%" 
  OR subtitle LIKE "%摩托%" 
  OR tag LIKE "%摩托%" 
) OR (
  title LIKE "%红色%" 
  OR subtitle LIKE "%红色%" 
  OR tag LIKE "%红色%" 
) OR (
  title LIKE "%美国%" 
  OR subtitle LIKE "%美国%" 
  OR tag LIKE "%美国%" 
) OR (
  title LIKE "%2006%" 
  OR subtitle LIKE "%2006%" 
  OR tag LIKE "%2006%" 
)
  • 我们还可以用正则
SELECT * FROM article WHERE 
title REGEXP "车|摩托|红色|美国|2006"
OR subtitle REGEXP "车|摩托|红色|美国|2006"
OR tag REGEXP "车|摩托|红色|美国|2006"
  • 几个字段合并起来
SELECT * FROM article WHERE 
CONCAT_WS(" ", title, subtitle, tag) REGEXP "车|摩托|红色|美国|2006"

之所以用 CONCAT_WS() 而不是 CONCAT() ,是因为后者在某字段为 NULL 的情况下会导致合并结果为 NULL,万无一失嘛,我们用前者。

  • 匹配关键词越多的文章越靠前
## 实例1
SELECT *,
(
    (IF( CONCAT_WS(" ", title, subtitle, tag) LIKE "%车%", 1, 0))
    + (IF( CONCAT_WS(" ", title, subtitle, tag) LIKE "%摩托%", 1, 0))
    + (IF( CONCAT_WS(" ", title, subtitle, tag) LIKE "%红色%", 1, 0))
    + (IF( CONCAT_WS(" ", title, subtitle, tag) LIKE "%美国%", 1, 0))
    + (IF( CONCAT_WS(" ", title, subtitle, tag) LIKE "%2006%", 1, 0))
) AS keyweight
FROM article WHERE 
CONCAT_WS(" ", title, subtitle, tag) REGEXP "车|摩托|红色|美国|2006"
ORDER BY keyweight DESC

## 实例2
SELECT 
	title,
	(IF(title LIKE "%车%",1,0)) AS keyweight 
FROM 
	article 
ORDER BY keyweight DESC

通过一组关键词站内模糊搜索,按照匹配关键词的多少来排序。这个需求,目标达成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值