MySQL 使用 CONCAT 实现单表多字段模糊查询

发布于 2017-11-21 23:25:27 字数 1314 浏览 5123 评论 0

前段时间在开发一个 CRM 系统,在搜索用户信息的时候遇到了问题,普通的 SQL 语句只能搜索某一个字段里面的内容,如果要查询多个字段的内容,类似于全文搜索,这时候就要用到CONCAT函数了。

MySQL 使用 CONCAT 实现单表多字段模糊查询

CONCAT

CONCAT 函数使用方法:

CONCAT(str1,str2,…)

返回结果为连接参数产生的字符串。如有任何一个参数为 NULL ,则返回值为 NULL。

注意

  1. 如果所有参数均为非二进制字符串,则结果为非二进制字符串。
  2. 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。
  3. 一个数字参数被转化为与之相等的二进制字符串格式,若要避免这种情况,可使用显式类型 cast 例如:
    SELECT CONCAT(CAST(int_col AS CHAR), char_col)
  4. CONCAT 函数在连接字符串的时候,只要其中一个是 NULL,那么将返回 NULL

模糊查询

单表多字段模糊查询的是指实现在单表中对多字段进行多个关键字的模糊查询,但这数个关键字并不一定都存在于某个字段。

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

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

在插入记录的同时,将需要进行MySQL单表多字段模糊查询的字段合并成一个字串并加入到一个新的字段中,然后对这个新字段进行模糊查询。
使用全文检索,但是这需要用到中文分词或者将汉字转化为拼音(拆分汉字是不可行的,MySQL 默认 FT 最小字节为 4),而且并不利于今后的维护。

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

醉城メ夜风

文章 0 评论 0

远昼

文章 0 评论 0

平生欢

文章 0 评论 0

微凉

文章 0 评论 0

Honwey

文章 0 评论 0

qq_ikhFfg

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文