MySQL单表多字段模糊查询解决方法
在项目中经常遇到查询接口需要实现单表中对多字段进行多个关键字的模糊查询,但这个关键字并不一定只存在于某个字段。例如现有一张User表,其中有name,address,remark三个字段,分别记录一条用户的姓名,地址和备注。根据用户输入的查询请求,在这三个字段中查询包含这些关键字的记录。目前遇到的问题是,这些关键字是可能存在于三个字段中的任意一个或者多个,但又要求三个字段必须包含所有的关键词。如果
·
在项目中经常遇到查询接口需要实现单表中对多字段进行多个关键字的模糊查询,但这个关键字并不一定只存在于某个字段。
例如现有一张User表,其中有name,address,remark三个字段,分别记录一条用户的姓名,地址和备注。根据用户输入的查询请求,在这三个字段中查询包含这些关键字的记录。
目前遇到的问题是,这些关键字是可能存在于三个字段中的任意一个或者多个,但又要求三个字段必须包含所有的关键词。如果分别对每个字段进行模糊匹配,是没法实现所需的要求,由此想到两种方法:
1.在查询记录的同时,将需要进行多字段模糊查询的字段合并成一个字串并加入到一个新的字段中,然后对这个新字段进行模糊查询。
SELECT * FROM t_admin t WHERE CONCAT(t.name,t.address,t.remark) LIKE '%林%';
SELECT * FROM t_admin t WHERE CONCAT(t.name,t.address,t.remark) LIKE '%宁夏%';
SELECT * FROM t_admin t WHERE CONCAT(t.name,t.address,t.remark) LIKE '%无%';
注意: CONCAT(str1,str2,…)
返回值:由全体出入参数合并在一起而得到的字符串。只要输入的参数中有NULL值,就返回NULL。CONCAT允许只有一个输入参数的情况。
2.在查询记录的同时,将需要进行多字段模糊查询的字段合并成一个查询条件。
SELECT * FROM t_admin t WHERE (t.`name` LIKE '%林%' OR t.address LIKE '%林%' OR t.remark LIKE '%林%' ) ;
更多推荐
所有评论(0)