我所做的商城项目前些时提了新需求,要求前台搜索商品除了能通过商品名称搜索到以外,还可以通过别个信息搜索,比如:商品编号、详情内容描述等等,类似于全文搜索了。我首先想到的就是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 ‘%关键字%’

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

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

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

最新文章

  1. [NOIp 1998 提高组]Probelm 2 连接多位数【2011百度实习生笔试题】
  2. Dubbo使用解析及远程服务框架
  3. Android,使用Intent或Bundle传递参数,跳转页面。
  4. 12天学好C语言——记录我的C语言学习之路(Day 7)
  5. css部分基础归纳--学习笔记
  6. &lt;%%&gt;与&lt;%=%&gt;区别
  7. 建立Hibernate二级Cache
  8. atitit.无损传输二进制数据串传输网络
  9. 每天收获一点点------Hadoop之HDFS基础入门
  10. 阿里大鱼 阿里云api
  11. 详解iBaits中SqlMapClientTemplate的使用
  12. Python----unittest discover()方法与执行顺序
  13. applicationContext.xml 基本配置
  14. 一个将java事物的非常好的栗子
  15. 《深入理解Java虚拟机》目录
  16. 什么是FSK制式?什么是DTMF制式?
  17. Ubuntu16.04编译安装tensorflow,2018最新血泪踩坑之后的全面总结!绝对成功!【转】
  18. 显示Deprecated: Assigning the return value of new by reference is deprecated in解决办法
  19. win10 跳过max path 260限制
  20. [bzoj3625][Codeforces 250 E]The Child and Binary Tree(生成函数+多项式运算+FFT)

热门文章

  1. 从后台读取项目文件在前端iframe中展示
  2. Mysql5.7忘记root密码及mysql5.7修改root密码的方法
  3. 七、配置ssh keys连通github跟ssh-agent
  4. 【C#】串口操作实用类
  5. Using DirectShow------------------msdn
  6. 行为型-命令模式(Command)
  7. VMware安装虚拟机Ubuntu提示piix4_smbus 0000:00:007.3: Host SMBus controller not enabled错误解决办法
  8. Python slice() 函数
  9. MongoDB--CSharp Driver Quickstart .
  10. 282 expression and operations添加运算符