在实际开发中有时会遇到用一个【搜索关键字】去搜索多个关联字段

一、情景描述

在项目中经常遇到查询接口需要实现单表中对多字段进行多个关键字的模糊查询,但这个关键字并不一定只存在于某个字段例如现有一张User表,其中有name,address,remark三个字段,分别记录一条用户的姓名,地址和备注。根据用户输入的查询请求,在这三个字段中查询包含这些关键字的记录。 目前遇到的问题是,这些关键字是可能存在于三个字段中的任意一个或者多个,但又要求三个字段必须包含所有的关键词。如果分别对每个字段进行模糊匹配,是没法实现所需的要求

二、解决方案

2.1、方案一

  1. SELECT * FROM user WHERE CONCAT(name,address,remark) LIKE '%李青%';
  2. SELECT * FROM user WHERE CONCAT(name,address,remark) LIKE '%盲仔%';
  • 注意:MySQL的CONCAT()方法,如果任意一个参数为null那么方法的返回值就会是null,所以要确保调用CONCAT()方法的字段值不为null

    2.2、方案二

    SELECT * FROM user WHERE (name LIKE'%李青%'  OR address LIKE '%李青%' OR remark LIKE '%李青%' );
    

    参考

  1. MySQL单表多字段模糊查询解决方法 @CSDN