ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

多字段模糊匹配 -->搜索功能(mysql原生语句实现)

2021-04-13 12:04:39  阅读:279  来源: 互联网

标签:domain description -- ifnull mysql NULL 多字段 like


这里有个需求就是会根据表里的某些字段输入某值进行匹配而且是模糊匹配,而我们一般的orm很难实现,这里就需要用到mysql的原生sql语句实现,这里后端使用的语言为golang,框架为beego;

目前想到两种方法:     第一种:在插入记录的同时,将需要进行mysql单表多字段模糊查询的字段合并成一个字串并加入到一个新的字段中,然后对这个新字段进行模糊查询,使用全文检索,但是这需要用到中文分词或者将汉字转化为拼音(拆分汉字是不可行的,mysql默认FT 默认最小字节为4),而且并不利于今后的维护;     第二种方式:CONCAT(str1, str2, ....); 返回值: 由全体输入参数合并在一起而得到的字符串,只要输入的参数中有NULL值,就返回NULL,CONCAT允许只有一个输入参数的情况,因此,mysql单表多字段模糊查询可以通过下面这个sql查询实现:         select * from  'test_table'  where concat ('title', 'tag', 'description')  like  '%关键字%';     但是这样有个问题,如果这三个字段中有值为 NULL , 则返回的也是NULL , 那么这一条记录可能就会被错过,怎么处理呢?使用IFNULL 进行判断:         select  * from 'test_table' where concat (ifnull('title', ''), ifnull('tag', ''), ifnull('description', ''))  like '%关键字%' ;       实际开发中使用在域名详情里有搜索功能,希望输入的内容可以在多个字段中模糊匹配查询,而不在乎具体输入的内容属于哪个字段的值?           命令行sql语句:         select * from secondlevel_domain_list where concat(ifnull(uniq_domain,''), ifnull(cname,''), ifnull(vip,''), ifnull(owner,''), ifnull(description ,''), ifnull(business ,'')) like '%5%';    部分代码展示
total, err := o.Raw("SELECT * FROM secondlevel_domain_list WHERE concat(ifnull(uniq_domain,''), ifnull(cname,''), ifnull(vip,''), ifnull(owner,''), ifnull(description ,''), ifnull(business ,'')) like ? ", "%"+keyword+"%").QueryRows(&sldls)
        但是在代码里实现需要根据具体框架和语言来实际操作了;

标签:domain,description,--,ifnull,mysql,NULL,多字段,like
来源: https://www.cnblogs.com/guo-s/p/14652472.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有