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传参:例