需求:
搜索框中可输入手机号,姓名,地址查询,后台需要对一个框中的多个字段做匹配查询。
搜索
可以在sql语句中做拼接条件查询:
<if test="condition!=null and condition!=''"> AND CONCAT(r.name,a.name,a.phone,a.addr_detail) LIKE '%' #{condition} '%' </if>
补充知识:在Mybatis xml使用mysql数据库进行多字段模糊查询(Like)
在mysql中使用Like进行一些简单轻量级的查询,并不需要考虑太多效率问题。
一、Like单字段查询比较简单。
没有特殊要求的话,直接使用%关键字%就进行左右匹配查询
..... <mapper..> ... <select...> SELECT c.* FROM contacts c WHERE c.delete_time IS NULL <if test="keyWord != null and keyWord != ''"> AND c.name LIKE concat('%',#{keyWord},'%')} </if> ORDER BY c.create_time DESC <select> </mapper>
那如果我需要查询多个字段,比如一个输入框,既可以输入姓名也可以输入电话、手机进行查询,又该如何呢?
二、关于多字段查询,这里有两个方式可供参考:
1、对多个字段分别查询,使用OR连接,这种方式效率在数据量大时,效率很差
..... <mapper..> ... <select...> SELECT c.* FROM contacts c WHERE c.delete_time IS NULL <if test="keyWord != null and keyWord != ''"> AND c.name LIKE concat('%',#{keyWord},'%')} OR c.mobile LIKE concat('%',#{keyWord},'%')} OR c.telphone LIKE concat('%',#{keyWord},'%')} </if> ORDER BY c.create_time DESC <select> </mapper>
2、使用concat将多个字段拼接之后在进行模糊查询,相比第一种更推荐第二种,执行效率更好
..... <mapper..> ... <select...> SELECT c.* FROM contacts c WHERE c.delete_time IS NULL <if test="keyWord != null and keyWord != ''"> AND CONCAT(IFNULL(c.name,''),IFNULL(c.mobile,''),IFNULL(c.telephone,'')) LIKE concat('%',#{keyWord},'%')} </if> ORDER BY c.create_time DESC <select> </mapper>
特别提醒:由于CONCAT中只要有一个为NULL,则会返回NULL,这将导致你查不到正确数据。为了确保不为NULL,使用 IFNULL判断下就可以了
IFNULL() 函数用于判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值。
以上这篇Mybatis多个字段模糊匹配同一个值的案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
尝试获取与字段ABC的值相匹配的文档。尝试了“必须”或“应该”查询,但未得到预期结果。有人能建议我应该尝试什么样的查询吗?使用HighLevelRestClient。 或 映射 条件工作正常。如果我只是反转条件并忽略字段值,那么我就会得到结果。 X1和Y1是精确的字段值(想想枚举) Still query返回所有文档。这应该已将文档筛选为匹配的值 样本文档
问题: 我已经在lucene索引中索引了NGA Geonames地名录。我需要模糊查询一个字段(地名),但将查询限制为具有特定国家代码的记录。下面是我正在运行的一个示例查询 我没有使用SOLR,我已经做了大量的研究和尝试,但我没有明确的答案,可能是我的速度太慢了。 我想对印度进行模糊搜索,但我只想要与“in”(国家代码)完全匹配的记录
问题内容: 我想做类似于“和”过滤器示例的操作,除了每个示例中都带有“应该”的术语,而不是示例中的字段类型。我提出以下内容: 但是,我收到此错误: 还有另一种方法可以执行我正在尝试执行的操作,还是我走在正确的轨道上?还是在Elasticsearch中这是不可能的? 问题答案: 每个布尔查询子句可以包含多个子句。字词查询(http://www.elasticsearch.org/guide/refe
本文向大家介绍thinkPHP实现多字段模糊匹配查询的方法,包括了thinkPHP实现多字段模糊匹配查询的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了thinkPHP实现多字段模糊匹配查询的方法。分享给大家供大家参考,具体如下: 引言:有时候查询要匹配多个字段。比如查询地址,地址是由多个字段组成的。有省、市、区等等,以及详细地址。这个时候如何查询呢? 实现不同字段相同的查询条件 用
问题内容: 我在具有以下映射的文档中有两个字段: 我如何找到所有与匹配的文档?禁用脚本是否有可能? 问题答案: 基本上,您需要使用脚本来执行此操作-即使由于完全将沙盒化了Lucene表达式而禁用了脚本,这也可能会起作用:
问题内容: 我正在构建一个简单的 搜索 算法,我想 用空格 打破我的 字符串 ,并在其上搜索数据库,如下所示: 这可能吗? 问题答案: 是的,您可以使用SQL 运算符来搜索多个绝对值: 如果要使用,则需要改为使用: 使用(如您所尝试的)要求所有条件为真,使用至少需要一个条件为真。