GVKun编程网logo

thinkPHP实现多字段模糊匹配查询的方法(thinkphp 模糊查询)

18

对于想了解thinkPHP实现多字段模糊匹配查询的方法的读者,本文将提供新的信息,我们将详细介绍thinkphp模糊查询,并且为您提供关于MySQL简单实现多字段模糊查询、PCBSQLSERVER字段

对于想了解thinkPHP实现多字段模糊匹配查询的方法的读者,本文将提供新的信息,我们将详细介绍thinkphp 模糊查询,并且为您提供关于MySQL简单实现多字段模糊查询、PCB SQL SERVER 字段模糊匹配个数 实现方法、PHP实现多字段模糊匹配查询的方法、PHP实现模糊查询的方法的有价值信息。

本文目录一览:

thinkPHP实现多字段模糊匹配查询的方法(thinkphp 模糊查询)

thinkPHP实现多字段模糊匹配查询的方法(thinkphp 模糊查询)

本文实例讲述了thinkPHP实现多字段模糊匹配查询的方法。分享给大家供大家参考,具体如下:

引言:有时候查询要匹配多个字段。比如查询地址,地址是由多个字段组成的。有省、市、区等等,以及详细地址。这个时候如何查询呢?

实现不同字段相同的查询条件

where($map)->select();

用到项目中

assign('address',$address); }

这里就很简单的解决了这个需求,而且很精准。

生成的sql语句如下

rush:sql;"> SELECT a.*,b.name,b.tel,b.province,b.city,b.area,b.detail,b.zipcode FROM sh_order a LEFT JOIN sh_member_address b on a.member_id = b.member_id and b.selected = 1 WHERE ( `store_id` = '10' ) AND ( a.member_id IN ('7') ) AND ( (b.province LIKE '%宿城区%') OR (b.city LIKE '%宿城区%') OR (b.area LIKE '%宿城区%') OR (b.detail LIKE '%宿城区%') ) ORDER BY addtime desc,sendtime asc,paytime desc LIMIT 0,10

从sql语句中可以看出,where中的括号,AND,OR组合的很巧妙。

截图如下

更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》、《》及《》。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

MySQL简单实现多字段模糊查询

MySQL简单实现多字段模糊查询

我所做的商城项目前些时提了新需求,要求前台搜索商品除了能通过商品名称搜索到以外,还可以通过别个信息搜索,比如:商品编号、详情内容描述等等,类似于全文搜索了。我首先想到的就是lucene,但是对代码这样的改动量就太大了。。。。目前线上版本如果做这种改动怕测试又出什么幺蛾子,如果又重新建表将这些信息另外存储起来又感觉好麻烦。。。于是就想想在sql语句上面做文章。在网上搜了搜还真有办法。那就是MySQL单标多字段模糊查询。

MySQL单表多字段模糊查询的是指实现在单表中对多字段进行多个关键字的模糊查询,但这数个关键字并不一定都存在于某个字段。当然你多表关联查询也是可以这样弄的。

例如现有table表,其中有title,tag,description三个字段,分别记录一条资料的标题,标签和介绍。然后根据用户输入的查询请求,将输入的字串通过空格分割为多个关键字,再在这三个字段中查询包含这些关键字的记录。

可目前遇到的问题是,这些关键字是可能存在于三个字段中的任意一个或者多个,但又要求三个字段必须包含所有的关键词。如果分别对每个字段进行模糊匹配,是没法实现所需的要求,由此想到两种方法:

在插入记录的同时,将需要进行MySQL单表多字段模糊查询的字段合并成一个字串并加入到一个新的字段中,然后对这个新字段进行模糊查询。 
使用全文检索,但是这需要用到中文分词或者将汉字转化为拼音(拆分汉字是不可行的,MySQL默认FT最小字节为4),而且并不利于今后的维护。 
《MySQL权威指南》中CONCAT的使用方法,在书中的对CONCAT的描述是:

CONCAT(str1,str2,…)
返回值:由全体出入参数合并在一起而得到的字符串。只要输入的参数中有NULL值,就返回NULL。CONCAT允许只有一个输入参数的情况。

因此,MySQL单表多字段模糊查询可以通过下面这个SQL查询实现

 

SELECT * FROM `magazine` WHERE CONCAT(`title`,`tag`,`description`) LIKE ‘%关键字%’



但是这样有个问题,如果这三个字段中有值为NULL,则返回的也是NULL,那么这一条记录可能就会被错过,怎么处理呢,我这边使用的是IFNULL进行判断,则sql改为:

 

<pre name="code">SELECT * FROM `magazine` WHERE CONCAT(IFNULL(`title`,''''),IFNULL(`tag`,''''),IFNULL(`description`,'''')) LIKE ‘%关键字%’

类似于如此则可以进行简单的多字段模糊搜索了。

PCB SQL SERVER 字段模糊匹配个数 实现方法

PCB SQL SERVER 字段模糊匹配个数 实现方法

今天工程系统给到加投加投组件的数据规则修改,遇到需将一个字段模糊匹配的个数统计

这类需求要平时应该很少遇到了,这里将此方法分享出来,

 

一.需求如下

     例子:itempara字段中的内容是:

                IVH板 铜镍金板 POFV板 HDI+光电板 +超长板 

                       需模糊匹配4个文本在 ServerIVH背板超长板  itempara字段中出现的次数

                        通过匹配:次数为2次

 

二.C# 写SQL SERVER函数代码实现

/// <summary>
        /// 获取like字段统计总数
        /// </summary>
        /// <param name="CurrentFied">ABCDABCGKDB</param>
        /// <param name="pendingString">A,C,D</param>
        /// <returns>得到A的个数+C的个数+D的个数</returns>
        [Microsoft.SqlServer.Server.SqlFunction(DataAccess = DataAccessKind.Read, IsDeterministic = true, Name = "getLikeCount")]
        public static SqlInt32 getLikeCount(SqlString CurrentFied, SqlString pendingString)
        {
            SqlInt32 resultInt = 0;
            string str = CurrentFied.ToString();
            var stringList = pendingString.ToString().Split('','');
            foreach (var item in stringList)
            {
                if (!string.IsNullOrEmpty(item))
                {
                    resultInt +=  Regex.Matches(str, item).Count;
                }
            }
            SqlInt32 SqlResult = resultInt;
            return SqlResult;
        }

 

三.SQL SERVER修改程序集与创建getLikeCount函数

alter  ASSEMBLY SQLfunctionAssembly   
   FROM ''D:\SQLClr.dll''      --改为自己C#写的dll路径填写
   WITH PERMISSION_SET = UNSAFE;   

   
    CREATE FUNCTION[dbo].[getLikeCount] (
    @CurrentFied NVARCHAR(max),
    @pendingString NVARCHAR(1000)
    )
    RETURNS int
    WITH EXECUTE AS CALLER        
    AS
    EXTERNAL NAME [SQLfunctionAssembly].[SQLClr.SQLfunction].[getLikeCount]    --[SQL程序集名].[命名空间.类名].[方法名]

 

四.SQL 函数测试

    SQL调用函数代码:

select dbo.getLikeCount(''IVH板 铜镍金板 POFV板 HDI+光电板 +超长板 '',''Server,IVH,背板,超长板'')
    select dbo.getLikeCount(''IVH板 + 背板 + Server+ 超长板 '',''Server,IVH,背板,超长板'')

    测试结果如下:  

    

 

PHP实现多字段模糊匹配查询的方法

PHP实现多字段模糊匹配查询的方法

这篇文章主要介绍了php实现多字段模糊匹配查询的方法,结合实例形式分析了php进行模糊匹配查询的相关模型操作与sql语句,需要的朋友可以参考下

引言:有时候查询要匹配多个字段。比如查询地址,地址是由多个字段组成的。有省、市、区等等,以及详细地址。这个时候如何查询呢?

实现不同字段相同的查询条件

$User = M("User"); // 实例化User对象
$map[&#39;name|title&#39;] = &#39;thinkphp&#39;;
// 把查询条件传入查询方法
$User->where($map)->select();
登录后复制

用到项目中

立即学习“PHP免费学习笔记(深入)”;

if ($address) {
  // 地址查询
  $where[&#39;b.province|b.city|b.area|b.detail&#39;] = array(&#39;like&#39;, &#39;%&#39;.$address.&#39;%&#39;);
        $this->assign(&#39;address&#39;, $address);
}
登录后复制

这里就很简单的解决了这个需求,而且很精准。

生成的sql语句如下

SELECT a.*,b.name,b.tel,b.province,b.city,b.area,b.detail,b.zipcode
FROM sh_order a
LEFT JOIN sh_member_address b on a.member_id = b.member_id and b.selected = 1
WHERE ( `store_id` = &#39;10&#39; ) AND ( a.member_id IN (&#39;7&#39;) ) AND ( (b.province LIKE &#39;%宿城区%&#39;) OR (b.city LIKE &#39;%宿城区%&#39;) OR (b.area LIKE &#39;%宿城区%&#39;) OR (b.detail LIKE &#39;%宿城区%&#39;) )
ORDER BY addtime desc, sendtime asc, paytime desc
LIMIT 0,10
登录后复制

从sql语句中可以看出,where中的括号,AND,OR组合的很巧妙。

截图如下

以上就是本文的全部内容,希望对大家的学习有所帮助。

相关推荐:

PHP实现随机获取未被微信屏蔽的域名

php实现文件管理与基础功能操作的方法

php中登录超时检测功能实例详解

以上就是PHP实现多字段模糊匹配查询的方法的详细内容,更多请关注php中文网其它相关文章!

PHP实现模糊查询的方法

PHP实现模糊查询的方法

本篇文章主要介绍php实现模糊查询的方法,感兴趣的朋友参考下,希望对大家有所帮助。

模式查询

1. SQL匹配模式

2. 正则表达式匹配模式(一般不推荐使用)

SQL匹配模式

立即学习“PHP免费学习笔记(深入)”;

1.使用sql匹配模式,不能使用操作符=或!=,而是使用操作符LIKE或NOT LIKE;

2.使用sql匹配模式,MYSQL提供了2种通配符。

%表示任意数量的任意字符(其中包括0个)

_表示任意单个字符

3.使用sql匹配模式,如果匹配格式中不包含以上2种通配符中的任意一个,其查询的效果等同于=或!=

4.使用sql匹配模式,匹配时,不区分大小写

#查询用户名以某个字符开头的用户
#查询用户名以字符&#39;l&#39;开头的用户: l%
SELECT * FROM user WHERE username LIKE &#39;l%&#39;;
#查询用户名以某个字符结尾的用户
#查询用户名以字符&#39;e&#39;结尾的用户:e%
SELECT * FROM user WHERE username LIKE &#39;e%&#39;;
#查询用户名包含某个字符的用户
#查询用户名包含字符&#39;o&#39;的用户:%o%
SELECT * FROM user WHERE username LIKE &#39;%o%&#39;;
#查询包含三个字符的用户
SELECT * FROM user WHERE username LIKE &#39;___&#39;;
#查询用户名第二个字符为o的用户:_o%
SELECT * FROM user WHERE username LIKE &#39;_o%&#39;;
登录后复制

正则表达式匹配模式

通配符(正则表达式)

.匹配任意的单个字符

*匹配0个或多个在它前面的字符

x*表示匹配任何数量的x字符

[..]匹配中括号中的任意字符
[abc]匹配字符ab或c
[a-z]匹配任意字母
[0-9]匹配任意数字
[0-9]*匹配任意数量的任何数字
[a-z]*匹配任何数量的字母

^表示以某个字符或字符串开始

^a 表示以字母a开头

$表示以某个字符或字符串结尾

s$表示以字母s结尾

使用正则表达式匹配模式使用的操作符是:

REGEXP 或 NOT REGEXP(RLIKE 或 NOT RLIKE)

注意:正则表达式匹配模式,其正则表达式出现在匹配字段的任意位置,

其模式就算匹配了,不必在两侧放一个通配符来使得其匹配;

如果仅用通配符 . 来匹配,假设N个,那么其匹配模式表示,大于等于N个;

怎么理解上面这句话呢?

就是说

... 匹配大于等于3个字符的数据
.... 匹配大于等于4个字符的数据
#查询用户名以字符 l开头的用户:^l;
#正则表达式写法

SELECT * FROM user WHERE username REGEXP &#39;^l&#39;;
#sql匹配模式写法:
SELECT * FROM user WHERE username LIKE &#39;l%&#39;;
#查询用户名正好是三个字符的用户:^...$;
#sql匹配模式写法:
SELECT * FROM user WHERE username LIKE &#39;___&#39;;
#正则表达式写法
SELECT * FROM user WHERE username REGEXP &#39;^...$&#39;;
登录后复制

总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。

相关推荐:

php 数组处理函数extract详解及实例

php in_array() 检查数组中是否存在某个值详解

PHP magento后台无法登录问题的解决方法

以上就是PHP实现模糊查询的方法的详细内容,更多请关注php中文网其它相关文章!

我们今天的关于thinkPHP实现多字段模糊匹配查询的方法thinkphp 模糊查询的分享已经告一段落,感谢您的关注,如果您想了解更多关于MySQL简单实现多字段模糊查询、PCB SQL SERVER 字段模糊匹配个数 实现方法、PHP实现多字段模糊匹配查询的方法、PHP实现模糊查询的方法的相关信息,请在本站查询。

本文标签:

上一篇thinkPHP交易详情查询功能详解(thinkphp join查询)

下一篇thinkPHP商城公告功能开发问题分析(thinkphp发布网站)