最有效率的“多字段模糊匹配关键字查询”的解决办法

关键字|解决

我们开发数据库应用时,常常需要用到模糊查询。如果同一个条件需要匹配很多字段怎么办呢?通常,程序员会每个字段都在SQL中“field like '%cond%'”一次。这样,SQL语句会长得惊人,碰上复杂一点的,甚至SQL语句会因为超长而被数据库拒绝执行。

其实,这个问题只要动动脑筋就很容易解决:

首先,将要匹配相同条件的字段连起来(field1+field2+...)成一个长字符串;
然后再 Like “%cond%”就可以了。

不过这种方法有个问题,就是得权衡多表连接造成的效率降低。一般来说,单表内字段肯定应该连接后再统一like判断;表间字段,则需要先过滤后,再实行这个策略。

采取这个策略,不仅可以缩短SQL,而且能够有效地提高SQL的执行效率。

欢迎访问国内首家旅游比价搜索网站:
搜游记(http://www.soyoji.com)——搜索,让旅游更轻松!

时间: 2024-09-20 19:14:14

最有效率的“多字段模糊匹配关键字查询”的解决办法的相关文章

thinkPHP实现多字段模糊匹配查询的方法_php实例

本文实例讲述了thinkPHP实现多字段模糊匹配查询的方法.分享给大家供大家参考,具体如下: 引言:有时候查询要匹配多个字段.比如查询地址,地址是由多个字段组成的.有省.市.区等等,以及详细地址.这个时候如何查询呢? 实现不同字段相同的查询条件 $User = M("User"); // 实例化User对象 $map['name|title'] = 'thinkphp'; // 把查询条件传入查询方法 $User->where($map)->select(); 用到项目中

nginx在post大量字段时出现 502 Bad Gateway解决办法

今天遇到一个奇怪的问题,在提交表单时直接就出现 502 Bad Gateway! 开始怀疑是程序问题,后来检查程序正常,发现post字段数大于1000时就出现502 Bad Gateway 而不超过1000时就正常,Google了下.发现有提到 php.ini里配置项 max_input_vars 默认没有开启,默认值是1000 于是修改 max_input_vars为自己适合的值. 修改后重启php service php-fpm stop service php-fpm start 再次提交

MySQL中字段名和保留字冲突的解决办法_Mysql

我们知道通常的SQL查询语句是这么写的: 复制代码 代码如下: select col from table; 这当然没问题,但如果字段名是"from"呢? 复制代码 代码如下: select from from table; 若真的这么写,必然出错,当字段名与MySQL保留字冲突时,可以用字符"`"将字段名括起来: 复制代码 代码如下: select `from` from table; 总结 刚发现我原先设计的数据库表里有两个字段都用了保留字(add,commen

preg_match正则匹配提示pcre.backtrack_limit解决办法

用preg_match正则提取目标内容,死活有问题,代码测得死去活来. 后来怀疑PHP 的preg_match有字符串长度限制,果然,发现"pcre.backtrack_limit "的值默认只设了100000. 解决办法:  代码如下 复制代码 ini_set('pcre.backtrack_limit', 999999999); 注:这个参数在php 5.2.0版本之后可用. 另外说说关于: pcre.recursion_limit pcre.recursion_limit是PCR

关键字的模糊匹配,数据量很大,在C#中有没有高效一点的办法,不用数据库,谢谢

问题描述 关键字的模糊匹配,数据量很大,在C#中有没有高效一点的办法,不用数据库,谢谢 关键字的模糊匹配,数据量很大,在C#中有没有高效一点的办法,不用数据库,谢谢 解决方案 分词,倒排索引,然后查询.总之要想速度快,需要多花一些存储空间. 解决方案二: C# 匹配

扩展 Entity Framework支持复杂的过滤条件(多个关键字模糊匹配)_实用技巧

之前遇到一个棘手的Linq to EF查询的技术问题,现有产品表Product,需要根据多个关键字模糊匹配产品名称, 现将解决方案分享出来. 问题描述 根据需求,我们需要编写如下的SQL语句来查询产品 复制代码 代码如下: select * from dbo.Product where (ProductName like 'Product1%' or ProductName like 'Product2%') 如何将以上的SQL语句转换成EF的写法呢? 方案一 可以使用Union,将以上SQL语

sql中生成查询的模糊匹配字符串_MsSql

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_Sql]') and xtype in (N'FN', N'IF', N'TF')) drop function [dbo].[f_Sql] GO if exists (select * from dbo.sysobjects where id = object_id(N'[序数表]') and OBJECTPROPERTY(id, N'IsUserTa

sql中生成查询的模糊匹配字符串

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_Sql]') and xtype in (N'FN', N'IF', N'TF')) drop function [dbo].[f_Sql] GO if exists (select * from dbo.sysobjects where id = object_id(N'[序数表]') and OBJECTPROPERTY(id, N'IsUserTa

关于mongodb按照字段模糊查询方法

关于mongodb按照字段模糊查询方法   模糊查询:tname包含某个关键字测试' cd /opt/soft/mongodb/bin ./mongo --host 192.168.0.1  --port 17017  test db.test_info.find({"tname": {$regex: '测试', $options:'i'}})  db.test_info.find({"tname": {$regex:/测试.*/i}})