msql使用concat函数实现关键字模糊查询(列表数据过滤-附前后端代码)(代码片段)

小花皮猪 小花皮猪     2023-03-03     296

关键词:

前言

不知道大家在开发中有没有这样的经历:根据条件过滤列表数据项。

这种的条件少的还好,比如根据姓名或者性别过滤,这样不仅页面会稍微美观一些,对于sql的压力以及后端的代码量也是会轻松不少的。

但是条件多了,条件1,条件2,条件3…条件100,这时候后端的接口就会一个一个的if判断,不断的追加条件(做为后端开发深有体会,头大)

我给大家简单画个图,大家就明白了:

那么有没有一种方式,可以又美化页面,不增加使用者的视觉疲劳,又能做到只输入一个关键字,就能将全部的数据按照输入的关键字进行过滤,从而只留下符合关键字信息的呢。

当然有,今天在做自己项目的时候就遇到了这个问题,正好借着这个机会分享我的思路以及相关的代码。

页面布局

关于页面布局,正如上述,我只需要留下一个输入框,用来过滤列表数据:

sql编写

那sql就不能无脑使用xxx like xxx and xxx like xxx 这种格式了。

告诉大家一个小技巧,msql的模糊查询是可以配合concat函数一起使用的。

具体sql格式为:

select a,b,c from table concat(a,b,c) like oncat('%',x,'%')

这样就可以实现,根据x这个值对a,b,c这三个字段进行过滤了。

下面是一个实战的sql:

select id, sex, user_name,nick_name,birthday,image,account,password,phone,address,create_time,update_time,is_delete,status from t_user 
where concat(user_name,nick_name,birthday,account,phone,address,remark) like concat('%','雪','%')order by id desc

备注:查询出的字段和concat的字段不一定非要是完全匹配的
比如你可以直接查询a,b,c,d,e 但是只concat(a,e)也是可以的,不需要像union all那么严格

后端代码

有个这个思路,代码就简单了,相关代码如下:

controller

 @GetMapping(value = "/queryList")
    public Result queryList(String keyWord) 
        // 根据关键字模糊查询展示列表数据
        return Result.ok(userService.queryUserInfo(keyWord));
    

service/impl

 List<User>  queryUserInfo(String keyWord);

 public List<User> queryUserInfo(String keyWord) 
        return userMapper.queryUserInfo(keyWord);
    

mapper/xml

 List<User> queryUserInfo(@Param("keyWord") String keyWord);
 <select id="queryUserInfo" resultType="com.wyh.entity.User">
        select
        id,
        sex,
        user_name,
        nick_name,
        birthday,
        image,
        account,
        password,
        phone,
        address,
        remark,
        create_time,
        update_time,
        is_delete,
        status
        from t_user
        <where>
            is_delete = 0
            <if test="keyWord !=null and keyWord !=''">
                and concat(id,sex,user_name,nick_name,birthday,image,account, password,phone, address,
                remark, create_time,update_time,is_delete,status) like concat( '%',#keyWord,'%')
            </if>
        </where>
        order by id desc
    </select>

接口测试

这时候接口就写完了,可以自己简单测试下:

有参数

无参

前端代码

接口写完了,直接调用即可。

由于我前端代码较多,大多数是和这个业务无关的代码,所以下面只粘贴关键代码,代码格式可能不太多,自行调整即可

   <el-input v-model="keyWord" placeholder="请输入关键字" clearable  class="keyWordText"></el-input>
   <el-button type="primary" icon="el-icon-search"  @click="queryUserList">搜索</el-button>


 data() 
    return 
        keyWord:'', // 输入框关键字
    	userTableData: [], // 用户列表
      ,


  // 展示用户列表    
  methods:   
    queryUserList() 
       axios.get('http://localhost:9090/user/queryList', 
          // 传递的参数
          params: 
            keyWord:this.keyWord
          
          // 回调函数,一定要使用箭头函数,不然this的指向不是vue示例
          ).then(res =>
            // 请求成功后的数据返回给用户列表用于展示
             this.userTableData = res.data.data;
          ).catch(error =>
             console.log(error)
          )
    
   
 mounted() 
    // 页面加载就渲染用户列表
    this.queryUserList();
  ,

测试效果

既然代码都写完了,那就试试看吧,下面为几个测试截图:

总结

其实用起来还是挺方便简单的,实际开发中还是要听从产品或者项目总监的为好。

oraclelike模糊查询concat的使用(代码片段)

concat()函数字符串拼接mysql:支持两个参数或者三个参数//两个参数拼接likeCONCAT(CONCAT('%',#query.orgName),'%')//三个参数拼接likeconcat('%',#query.orgName,'%')oracle:只支持两个参数但是可以采用’||’进行字符... 查看详情

模糊查询和聚合函数

使用关键词进行模糊查询1.模糊查询:01.使用like关键字,模糊筛选出的数据结果02.在大批量的数据中进行,模糊条件的查询。2.通配符一类字符,代替一个或多个真正的字符与like关键字一起使用“_”:一个字符“%”:任意长度的... 查看详情

js根据数据关键字实现模糊查询功能(代码片段)

js根据数据关键字实现模糊查询功能模糊查询实现模糊查询功能的步骤和一般方法第一步:创建假数据或请求接口数据第二步:分析数据格式,处理数据第三步:验证功能完整代码模糊查询模糊查询功能是指在搜... 查看详情

oraclelike模糊查询concat的使用(代码片段)

...个参数拼接likeCONCAT(CONCAT('%',#query.orgName),'%')//使用'||'拼接like'%'||#query.orgName||'%'如果oracle使用三个参数拼接会报invalidnumberofarguments:参数无效错误SQLServer:用’+’进行字符串拼接like'%'+... 查看详情

7-06模糊查询

通配符:一类字符代替一个或多个真真正的字符。与LIKE关键字一起使用。1:使用LIKE关键字进行模糊查询:--查询用户表中地址为四川的所有用户信息SELECT*FROMUserinfoWHEREUserAddressLIKE‘%四川%‘  模糊查询指的是只要这列包含这... 查看详情

mybatis实现模糊查询

在使用SSM框架实现后台功能的过程中,有可能需要对数据库中的某一个字段实现模糊搜索,使用sql语句就是:SELECT*FROM[TABLENAME]WHEREu_nameLIKE‘%A%‘但是在Mybatis中是不可以这样直接使用的,而要借助CONCAT方法:SELECT*FROM[TABLENAME]WHEREu... 查看详情

mysql精准模糊查询使用concat加占位符(下划线“_”)的使用,直接限定了长度和格式

比如现在有张表t_user,如下:(表中只是引用某某某的话,并无恶意)idname1司马懿2司马老贼3司马老贼OR司马懿4司马大叔    1.模糊查询一般用的模糊查询都是like关键词,然后再在要查的字段中用百分号“%”... 查看详情

mysql模糊查询千万数据

...实现SELECT*FROM`magazine`WHERECONCAT(`title`,`tag`,`description`)LIKE‘%关键字%’2.如果 查看详情

mysql如何使用like关键字实现模糊查询?有啥注意事项

参考技术A以下语句调试通过:1SELECT*FROMcourseWHEREnameLIKE'%晓%'运行效果:注意事项:使用like%name%这样的语句是不会走索引的,相当于全表扫描;数据量小的时候不会有太大的问题,数据量大了以后性能会下降的很厉害;建议... 查看详情

造成索引失效的情况

...createindexidx_xxxontable(column);  分析索引使用情况用explain关键字  失效情况:  like模糊查询%开头  表示广义或者表示否定的查询条件,例如:<>,in,notin,notexists,!=  索引列进行运算(+,-,*,/,!),使用函数 ... 查看详情

关于sql模糊查询(全字段)

...e查询。是不是对于其他数据库(Oracle,SQLServer)只能用or关键字进行连接?或者还有什么其他好的方法?还有在hibernate中,应该如何实现?是将hql代替为用or连接的sql语句么?代码是在VC++里面:[cpp]viewplaincopyprint?CStringsql,str;sql.Form... 查看详情

js实现模糊查询

...实现的?首先,我们要知道模糊查询是根据输入关键字来匹配字符的。然后,根据字符匹配算法来匹配你的输入值,最后筛选出匹配后的关键值就ok了。      常见的匹配方法有两种:一、indexOf()字符串方法... 查看详情

造成索引失效的情况

...createindexidx_xxxontable(column);  分析索引使用情况用explain关键字  失效情况:  like模糊查询%开头  表示广义或者表示否定的查询条件,例如:<>,in,notin,notexists,!=  索引列进行运算(+,-,*,/,!),使用函数 ... 查看详情

java项目/jsp页面中怎样实现模糊查询

...步,谢谢大家!jsp实现模糊查询实际就是在后台使用like关键字和%符号做查询比如查询所有姓王的人.jsp文本框输入王点击查询按钮把文本框的值传入后台在后台拼接sql语句select*fromuserwherenamelike'王%';'王%'代表以'王&... 查看详情

CONCAT 函数中超过 2 列

】CONCAT函数中超过2列【英文标题】:Morethan2columnsinaCONCATfunction【发布时间】:2013-05-1003:32:05【问题描述】:在SQLServer2012中,我想将concat5列合并为1,但在查询中它可以工作,但是当我放入视图时,它会给我一个类似的错误消息17... 查看详情

mysql索引失效总结

...一个普通的索引,我们主要看一下,模糊查询时,%加在关键字之前,和加在关键字之后的影响。经过上述的测试,我们发现,在like模糊查询中,在关键字后面加%,索引可以生效。而如果在关键字前面加了%,索引将会失效。4、... 查看详情

jsp如何实现模糊查询

...?。。。。。。。%我也知道啊,可是如果是输入了多个关键字呢?这才是问题的关键啊、、、、jsp模糊查询是根据页面上输入的关键字进行部分匹配来实现的。分为前向检索和后项检索。这个主要是在sql端实现的,只要页面参... 查看详情

sql对同一字段进行模糊查询时如何将两个条件写入一个like中

...ername=admin,password=123456我们要实现的效果是可以输入多个关键字查询,多个关键字间以逗号分隔。使用上述表举例:输入单个关键字“admin”可查出这两条数据,输入“admin,000000”只查出第一条数据,可实现的sql语句是:select*fro... 查看详情