热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

phpwhere嵌套查询,thinkphp_complex复合查询where多个子组实现

SELECT*FROMuserWHERE(mobile13824653465ORnicknameevanORopenid14545-fdes)AND(bind_sellerfdaf

SELECT * FROM &#96;user&#96; WHERE ( &#96;mobile&#96; &#61; &#39;13824653465&#39; OR &#96;nickname&#96; &#61; &#39;evan&#39; OR &#96;openid&#96; &#61; &#39;14545-fdes&#39; ) AND ( &#96;bind_seller&#96; &#61; &#39;fdaflj24214&#39; OR &#96;seller_type&#96; &#61; &#39;1&#39; ) AND ( &#96;reg_time&#96; <12324568 AND &#96;login_count&#96; > 10 )

THINKPHP 数组where实现多个复合查询&#xff0c;例如上面的sql。查询官方手册&#xff0c;感觉无法实现。于是想到修改一下THINKPHP框架的DB类。

thinkphp 3.1 文件所在 \ThinkPHP\Lib\Core\Db.class.php

tthinkphp 3.2  \ThinkPHP\Library\Think\Db\Driver.class.php

修改这个方法

protected function parseThinkWhere($key,$val) {

$whereStr &#61; &#39;&#39;;

switch($key) {

case &#39;_string&#39;:

// 字符串模式查询条件

$whereStr &#61; $val;

break;

case &#39;_complex&#39;:

case &#39;_complex1&#39;: //增加多个case分支&#xff0c;支持多个符合 只查询

case &#39;_complex2&#39;:

case &#39;_complex3&#39;:

case &#39;_complex4&#39;: // 复合查询条件

$whereStr &#61; substr($this->parseWhere($val),6);

break;

case &#39;_query&#39;:

// 字符串模式查询条件

parse_str($val,$where);

if(isset($where[&#39;_logic&#39;])) {

$op &#61; &#39; &#39;.strtoupper($where[&#39;_logic&#39;]).&#39; &#39;;

unset($where[&#39;_logic&#39;]);

}else{

$op &#61; &#39; AND &#39;;

}

$array &#61; array();

foreach ($where as $field&#61;>$data)

$array[] &#61; $this->parseKey($field).&#39; &#61; &#39;.$this->parseValue($data);

$whereStr &#61; implode($op,$array);

break;

}

return $whereStr;

}

$ where[&#39;mobile&#39;] &#61; &#39;13824653465&#39;;

$where[&#39;_logic&#39;] &#61; &#39;or&#39;;

$where[&#39;nickname&#39;] &#61; &#39;evan&#39;;

$where[&#39;openid&#39;] &#61; &#39;14545-fdes&#39;;

$where2[&#39;bind_seller&#39;] &#61; &#39;fdaflj24214&#39;;

$where2[&#39;seller_type&#39;] &#61; &#39;1&#39;;

$where2[&#39;_logic&#39;] &#61; &#39;or&#39;;

$where3[&#39;reg_time&#39;] &#61; array(&#39;lt&#39;,12324568);

$where3[&#39;login_count&#39;] &#61; array(&#39;gt&#39;,10);

$map[&#39;_complex&#39;] &#61; $where;

$map[&#39;_complex1&#39;]&#61; $where2;

$map[&#39;_complex2&#39;]&#61; $where3;

$sql &#61; M(&#39;User&#39;)->where($map)->select();

echo M()->getLastSql();

thinkphp where()条件查询

今天来给大家讲下查询最常用但也是最复杂的where方法,where方法也属于模型类的连贯操作方法之一,主要用于查询和操作条件的设置.where方法的用法是ThinkPHP查询语言的精髓,也是Think ...

【三十三】thinkphp之SQL查询语句(全)

一:字符串条件查询 //直接实例化Model $user&#61;M(&#39;user1&#39;); var_dump($user->where (&#39;id&#61;1 OR age&#61;55&#39;)->select()); ...

tp3.2 复合查询or

tp3.2 复合查询or $where[&#39;goods_name&#39;] &#61; array("like","%$q%");$where[&#39;goods_sn&#39;] &#61; ar ...

014-elasticsearch5.4.3【五】-搜索API【三】复合查询boolQuery、constantScoreQuery、disMaxQuery

一.概述 复合查询包装其他复合或叶子查询,以组合其结果和分数,更改其行为,或从查询切换到筛选器上下文. 1.1.constantScoreQuery 包含另一个查询但在过滤器上下文中执行的查询.所有匹 ...

ThinkPHP(3)SQL查询语句

ThinkPHP中对查询语句,包含了基本的查询方式.表达方式.快速查询.区间查询.组合查询.SQL查询.动态查询和子查询. 一.查询方式 ThinkPHP提供了三种基本的查询方式:字符串条件查询.索引 ...

Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询

HQL查询方式 这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了 ...

彻底理解Oracle中的集合操作与复合查询

--Oracle中的复合查询 复合查询:包含集合运算(操作)的查询 常见的集合操作有: union: 两个查询的并集(无重复行.按第一个查询的第一列升序排序) union all:两个查询的并集(有重 ...

ThinkPHP getBy动态查询

getBy动态查询 ThinkPHP getBy动态查询是一个魔术方法,可以根据某个字段名称动态得到对应的一条数据记录. 根据用户名(username)查询对应的用户资料记录: public func ...

Java中mongodb使用and和or的复合查询

在MongoDB的JAVA查询中对应这些问题 and查询 //条件 startsAt curr long curr &#61; new Date().getT ...

随机推荐

测试框架Mocha与断言expect

测试框架Mocha与断言expect在浏览器和Node环境都可以使用除了Mocha以外,类似的测试框架还有Jasmine.Karma.Tape等,也很值得学习. 整个项目源代码: 为什么学习测试代码? ...

Apache不重新编译&#xff0c;利用apxs工具给Apache添加模块&#xff0c;如cgi模块

想实践下Apache是如何运行cgi程序的,却发现先前编译安装Apache的时候,没有安装Apache的cgi模块. 附:CentOS6.x编译安装LAMP(2):编译安装 Apache2.2.25 ...

linux 冒号的用途

用途说明 我们知道,在Linux系统中,冒号(:)常用来做路径的分隔符(PATH),数据字段的分隔符(/etc/passwd)等.其实,冒号(:)在Bash中也是一个内建命令,它啥也不做,是个空命令. ...

Linux进程间通信与线程间同步详解(全面详细)

引用:http://community.csdn.net/Expert/TopicView3.asp?id&#61;4374496linux下进程间通信的几种主要手段简介: 1. 管道(Pipe)及有名管道( ...

light oj 1214 - Large Division

1214 - Large Division   PDF (English) Statistics Forum Time Limit: 1 second(s) Memory Limit: 32 MB G ...

C# DES_AES_MD5_加密_解密

一.DES加解密 DES一共就有4个参数参与运作:明文.密文.密钥.向量.其中这4者的关系可以理解为: 密文&#61;明文&#43;密钥&#43;向量: 明文&#61;密文-密钥-向量: 为什么要向量这个参数呢?因为如果有一篇文章, ...

org.hibernate.TransientObjectException:The given object has a null identifier

1.错误描述 org.hibernate.TransientObjectException:The given object has a null identifier:com.you.model.U ...

JVM常量池和八种基本数据及字符串

迄今为止看到的对常量池和字符串最为透彻的解释,赞一个! 常量池(constant_pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据.它包括了关于类.方法.接口等中的常量, ...

Vue-Router路由 Vue-CLI脚手架和模块化开发 之 使用路由对象获取参数

使用路由对象$route获取参数: 1.params: 参数获取:使用$route.params获取参数: 参数传递: URL传参:例



推荐阅读
  • 渗透测试基础bypass绕过阻挡我们的WAF(下)
    渗透测试基础-bypass ... [详细]
  • php缓存ri,浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
    thinkPHP的F方法只能用于缓存简单数据类型,不支持有效期和缓存对象。S()缓存方法支持有效期,又称动态缓存方法。本文是小编日常整理有关thinkp ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 本文总结了在开发中使用gulp时的一些技巧,包括如何使用gulp.dest自动创建目录、如何使用gulp.src复制具名路径的文件以及保留文件夹路径的方法等。同时介绍了使用base选项和通配符来保留文件夹路径的技巧,并提到了解决带文件夹的复制问题的方法,即使用gulp-flatten插件。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
  • 本文介绍了PHP常量的定义和使用方法,包括常量的命名规则、大小写敏感性、全局范围和标量数据的限制。同时还提到了应尽量避免定义resource常量,并给出了使用define()函数定义常量的示例。 ... [详细]
  • 本文介绍了如何对PHP二维数组进行排序以及如何获取最大值。同时还提到了在数据分析系统中使用排序的实例,以及如何统计角色等级和创建角色总数。 ... [详细]
  • 在单位的一台4cpu的服务器上部署了esxserver,挂载了6个虚拟机,目前运行正常。在安装部署过程中,得到了cnvz.net论坛精华区 ... [详细]
  • 可空类型可空类型主要用于参数类型声明和函数返回值声明。主要的两种形式如下: ... [详细]
author-avatar
我想要的幸福12_816
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有