热门标签 | 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传参:例



推荐阅读
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社区 版权所有