MySQL简单实现多字段模糊查询【转】「终于解决」

MySQL简单实现多字段模糊查询【转】「终于解决」我所做的商城项目前些时提了新需求,要求前台搜索商品除了能通过商品名称搜索到以外,还可以通过别个信息搜索,比如:商品编号、详情内容描述等等,类似于全文搜索了。我首先想到的就是lucene,但是对代码这样

MySQL简单实现多字段模糊查询【转】

我所做的商城项目前些时提了新需求,要求前台搜索商品除了能通过商品名称搜索到以外,还可以通过别个信息搜索,比如:商品编号、详情内容描述等等,类似于全文搜索了。我首先想到的就是lucene,但是对代码这样的改动量就太大了。。。。目前线上版本如果做这种改动怕测试又出什么幺蛾子,如果又重新建表将这些信息另外存储起来又感觉好麻烦。。。于是就想想在sql语句上面做文章。在网上搜了搜还真有办法。那就是MySQL单标多字段模糊查询。
 
MySQL单表多字段模糊查询的是指实现在单表中对多字段进行多个关键字的模糊查询,但这数个关键字并不一定都存在于某个字段。当然你多表关联查询也是可以这样弄的。
 
例如现有table表,其中有title,tag,description三个字段,分别记录一条资料的标题,标签和介绍。然后根据用户输入的查询请求,将输入的字串通过空格分割为多个关键字,再在这三个字段中查询包含这些关键字的记录。
 
可目前遇到的问题是,这些关键字是可能存在于三个字段中的任意一个或者多个,但又要求三个字段必须包含所有的关键词。如果分别对每个字段进行模糊匹配,是没法实现所需的要求,由此想到两种方法:
 
在插入记录的同时,将需要进行MySQL单表多字段模糊查询的字段合并成一个字串并加入到一个新的字段中,然后对这个新字段进行模糊查询。 
使用全文检索,但是这需要用到中文分词或者将汉字转化为拼音(拆分汉字是不可行的,MySQL默认FT最小字节为4),而且并不利于今后的维护。 
 
MySQL权威指南》中CONCAT的使用方法,在书中的对CONCAT的描述是:
CONCAT(str1,str2,…)
返回值:由全体出入参数合并在一起而得到的字符串。只要输入的参数中有NULL值,就返回NULL。CONCAT允许只有一个输入参数的情况。

因此,MySQL单表多字段模糊查询可以通过下面这个SQL查询实现

SELECT * FROM `magazine` WHERE CONCAT(`title`,`tag`,`description`) LIKE ‘%关键字%’

代码100分

但是这样有个问题,如果这三个字段中有值为NULL,则返回的也是NULL,那么这一条记录可能就会被错过,怎么处理呢,我这边使用的是IFNULL进行判断,则sql改为:

代码100分<pre name="code" class="sql">SELECT * FROM `magazine` WHERE CONCAT(IFNULL(`title`,""),IFNULL(`tag`,""),IFNULL(`description`,"")) LIKE ‘%关键字%’

类似于如此则可以进行简单的多字段模糊搜索了。

文章转自:https://www.cnblogs.com/fan-yuan/p/9299834.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/9121.html

(0)
上一篇 2023-02-15
下一篇 2023-02-15

相关推荐

  • Python long数据类型详解

    Python long数据类型详解Python long数据类型是一种用于表示任意大整数的数据类型,与int数据类型不同,long类型可以表示任意大的整数,而int类型只能表示特定大小的整数。long数据类型是Python 2.x版本中的数据类型,而在Python 3.x版本中,int类型已可以表示任意大的整数,因此,long类型已经被废弃。

    2024-09-02
    20
  • Python执行命令的方法

    Python执行命令的方法a href=”https://beian.miit.gov.cn/”苏ICP备2023018380号-1/a Copyright www.python100.com .Some Rights Reserved.

    2024-01-14
    105
  • Python实现列表转字典

    Python实现列表转字典在Python编程中,将列表转换为字典是一个实用的技能。字典是Python中最常用的数据结构之一,列表是另一个重要的数据结构。将列表转换为字典是将数据从列表形式转换为字典形式的过程。字典表示键-值对的集合,每个键都是独特的、不可变的,作为字典的键可用于索引字典的值。

    2024-09-10
    26
  • RadonDB MySQL on K8s 2.1.3 发布![通俗易懂]

    RadonDB MySQL on K8s 2.1.3 发布![通俗易懂]RadonDB MySQL Kubernetes 于 3 月 24 日正式发布新版本 2.1.3 。该版本主要基于在 2.1.2 进行功能优化和升级。 致谢 首先感谢 @andyli029

    2023-05-10
    143
  • 在Docker中运行PostgreSQL + pgAdmin 4

    在Docker中运行PostgreSQL + pgAdmin 4拉取postgresql镜像:docker pull postgres 运行postgresql:docker run -d -p 5432:5432 –name postgresql -v pgd

    2023-03-14
    151
  • MySQL进阶系列:一文详解explain[通俗易懂]

    MySQL进阶系列:一文详解explain[通俗易懂]explain有何用处呢: 为了知道优化SQL语句的执行,需要查看SQL语句的具体执行过程,以加快SQL语句的执行效率。 ​ 可以使用explain+SQL语句来模拟优化器执行SQL查询语句,从而知道

    2023-04-22
    148
  • Python函数定义的例子:计算两个数字的乘积

    Python函数定义的例子:计算两个数字的乘积在Python编程中,函数是一个非常常用的概念。函数可以将一段代码封装起来,使得重复使用变得更加简单,减少了出错的可能性。在本文中,我们将演示如何定义一个简单的Python函数,用于计算两个数字的乘积。

    2024-03-23
    93
  • Python休息时间time.sleep的解释

    Python休息时间time.sleep的解释Python作为一种高级语言,被广泛用于数据分析、人工智能、网络爬虫等领域。虽然它具有很多优点,但是长时间的工作也会导致疲劳。Python休息的必要性是不言而喻的。

    2024-04-10
    73

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注