SELECT `id`,`weixin_id`,`user_name`,`sex`,`area_id`,`address_near`,`phone`,`create_time`,`import_user_name`,`call_phone_num`,`browse_num`,`disable_status`,`remark` FROM `f_share_info` WHERE ( concat(phone, IFNULL(share_detail, ''),IFNULL(search_save_content, ''), IFNULL(user_name, '')) like '%18602029479%' ) ORDER BY id desc LIMIT 0,30;

在最近的一个项目需要实现在单表中对多字段进行多个关键字的模糊查询,但这数个关键字并不一定都存在于某个字段

例如现有table表,其中有title,tag,description三个字段,分别记录一条资料的标题,标签和介绍。然后根据用户输入的查询请求,将输入的字串通过空格分割为多个关键字,再在这三个字段中查询包含这些关键字的记录。

可目前遇到的问题是,这些关键字是可能存在于三个字段中的任意一个或者多个,但又要求三个字段必须包含所有的关键词。如果分别对每个字段进行模糊匹配,是没法实现所需的要求,由此想到两种方法:

  1. 在插入记录的同时,将需要进行多字段模糊查询的字段合并成一个字串并加入到一个新的字段中,然后对这个新字段进行模糊查询。

  2. 使用全文检索,但是这需要用到中文分词或者将汉字转化为拼音(拆分汉字是不可行的,MySQL默认FT最小字节为4),而且并不利于今后的维护。

在网上爬了两天,对此问题的处理都没有找到满意的解决方法,最后在《MySQL权威指南》中翻到了CONCAT的使用方法,在书中的对CONCAT的描述是:

CONCAT(str1,str2,…)
返回值:由全体出入参数合并在一起而得到的字符串。只要输入的参数中有NULL值,就返回NULL。CONCAT允许只有一个输入参数的情况。

因此,前文的查询可以通过下面这个SQL查询实现
SELECT * FROM `magazine` WHERE CONCAT(`title`,`tag`,`description`) LIKE ‘%关键字%’

在最近的一个项目需要实现在单表中对多字段进行多个关键字的模糊查询,但这数个关键字并不一定都存在于某个字段,查了一下有点收获

select * from table where `字段`='值' and concat(`title`,`content`) like '%关键字%'

今天有朋友问

引用原文:



请教一个问题:

我在mysql中建一个表,三百多万条记录,大约200mb大小,简单的模糊查询就很慢,请问有什么解决办法吗??也许 col_XX 会达到20个左右.


他的SQL如下:

1   select * from table_XX where col_1
like '%条件%' or col_2 like '%条件%' or col_3 like '%条件%'or col_4 like
'%条件%'

首先,需要说明的是,以上的SQL语句,在任何类型的数据库上执行都不会使用到索引,意味着逐行扫描。

数据库只能做以下:
在建好联合索引 col_1,col_2.....后,

1    select * from table_XX where col_1 like '条件%' or col_2 like '条件%'
or col_3 like '条件%'or col_4 like '条件%'

在必须以col_1作为where第一个条件的前提下,以上条件能使用到索引,也就是说最前面不能用%,只能以“条件”开头.

如果一定要实现 like '%条件%' ,数据库无法做到。

以下是实现的可选方案:

最新文章

  1. 混合 Data Warehouse 和 Big Data 倉庫的新架構
  2. 深入理解Java:注解
  3. bzoj 3295 动态逆序对 CDQ分支
  4. JdbcTemplate中queryForObject的EmptyResultDataAccessException问题
  5. 二、JavaScript语言--事件处理--DOM事件探秘
  6. AngularJS——依赖注入
  7. hadoop map-red的执行过程
  8. Puppet's Commands 3.7
  9. android TabActivity的局限性 是否还有存在的必要性
  10. CSDN Markdown简明教程5-高速上手
  11. 前端开发工具(安装及常用技巧)——sublime text 3
  12. 关于a.b和a[b]的区别
  13. TCP/IP协议族(二) HTTP报文头解析
  14. Web平台安装及检测程序
  15. Database differential backup差异备份和还原
  16. 使用antd Table + mobx 处理数组 出现的一系列问题
  17. nodejs02-fs模块
  18. Problem 1: Multiples of 3 and 5
  19. Dev修改gridview 背景色
  20. 微信小程序 禁止ios页面下拉下滑滚动 出现空白的情况

热门文章

  1. cookie注入原理及注入检测
  2. New Concept English three (22)
  3. Linux:ln命令详解(软连接,硬链接)
  4. ftp上传下载记录
  5. EXC_BAD_ACCESS(code...)坏内存访问 调试
  6. 在IIS上搭建FTP站点
  7. Ubuntu中apt-get安装或更新软件错误的解决办法
  8. 动态样式语言Sass&Less介绍与区别
  9. IIS项目发布完整流程
  10. Django基于Form之登录和注册