THINKPHP实现查询两个WHERE条件数组间OR查询

在ThinkPHP中,where方法可传入where数组条件,现在需要两个where数组条件之间使用or逻辑执行sql查询,也就是:

$where['xx']=3;
$where['yy']=9;
 
$condition['ww']=33;
$condition['zz']=99;

现在需要条件是$where or $condition,ThinkPHP中如何表达呢?

这里用到ThinkPHP的组合查询:

$User = M("User"); // 实例化User对象
$map['id'] = array('neq',1);
$map['name'] = 'ok';
$map['_string'] = 'status=1 AND score>10';
$map['_logic'] = 'OR';
 
$User->where($map)->select();
这里$map[‘_string’]貌似只能传字符串形式,不能传数组,这里希望两个条件都是数组,有两个办法,一个是把数组自己拼接成字符串,另一个办法使用buildSql方法得到其中一个条件下生成的sql,用正则提取其中需要的sql语句。

以下示例是第二个方法:

private function wait_handle_nums($bo_seller_id){
    $where_90 = array();
    $where_90['bo_deal_status'] = 85;
    $where_90['bo_last_modify'] = array(array('gt',date('Y-m-d H:i:s',strtotime('-14 days'))),array('lt',date('Y-m-d H:i:s',strtotime('-13 days'))));
    $where_90['bo_seller_id'] = $this->uid;
    $where_90 = M('back_order')->where($where_90)->buildSql();
 
    $where_90 = strstr($where_90,'WHERE');
    $preg_match = preg_match('/WHERE(.*)/', $where_90, $matches);
    if($preg_match){
        $where_90 = $matches[1];
        $where_90 = '('.$where_90;
    }
 
    $where = array();
    $where['bo_deal_status'] = 62;
    $where['bo_last_modify'] = array(array('gt',date('Y-m-d H:i:s',strtotime('-3 days'))),array('lt',date('Y-m-d H:i:s',strtotime('-2 days'))));
    $where['bo_seller_id'] = $this->uid;
 
    $map['_complex'] = $where;
    $map['_string'] = $where_90;
    $map['_logic'] = 'OR';
 
    $field = 'COUNT(*) as refund_nums,bo_seller_id';
    $re = M('back_order')->where($map)->field($field)->find();
 
    return $re['refund_nums'];
}

得到的执行的sql语句是:

SELECT COUNT(*) as refund_nums,`bo_seller_id`
FROM `js_back_order`
WHERE (  ( `bo_deal_status` = 62 ) AND ( (`bo_last_modify` > '2015-07-10 08:48:20') AND (`bo_last_modify` < '2015-07-11 08:48:20')  ) )
OR
( ( ( `bo_deal_status` = 85 ) AND ( (`bo_last_modify` > '2015-06-29 08:48:20') AND (`bo_last_modify` < '2015-06-30 08:48:20')  )  ) )

两个where条件直接OR.

时间: 2024-10-04 01:33:45

THINKPHP实现查询两个WHERE条件数组间OR查询的相关文章

oracl-带多个条件的动态分页查询

问题描述 带多个条件的动态分页查询 如何用struts2 和orcal数据库实现带多条件的动态分页查询?,求指教 解决方案 路过看看,不过真的不会,不好意思 解决方案二: 多条件分页查询 和 不带条件的的分页查询只是多了几个条件而已,. sql 加几个条件不就好了吗

ThinkPHP 分页中带入查询(搜索)条件

很多情况下,分页还会带入查询条件,而这时查询往往是不固定的.例如常见的搜索,需要根据用户查询的关键字来进行检索,在搜索结果太多时,就需要将搜索结果进行合理分页. ThinkPHP 分页可以很容易的实现对不固定查询参数的支持.具体实现是给分页类的 parameter 属性赋值或者直接实例化分页类时传入查询参数.下面以例子来说明. parameter 属性赋值 例如要检索用户表中状态为 1 (status=1) 并且电子包含 163 的用户,当提交表单时(注意表单是 GET 方式提交),形成的 UR

thinkphp多表查询两表有重复相同字段的完美解决方法_php技巧

框架:thinkphp 版本:3.2.3 内容:查询语句 解决问题:重复字段问题 $Data = M('a')->where($where) ->Field('a.name as aname,b.name as uname,a.*') ->join('b on b.jb_id=a.id') ->order('a.id desc') ->select(); 解释:a.* 查询a表所有的字段 a.name as aname 转换a表中的name重复字段为aname 以上就是小编为

PHP实现查询两个数组中不同元素的方法_php技巧

本文实例讲述了PHP实现查询两个数组中不同元素的方法.分享给大家供大家参考,具体如下: <?php $a = array( "max_allow_dialogs", "livechat_server_ip", "livechat_service_time", "abort_zh_cn", "abort_zh_tw", "abort_en_usa", "welcome_zh

.net mvc3问题求助,如何设计显示查询两张表中有条件的页面。

问题描述 昨天有提了一下类似的问题,被批评没有遵循MVC的原则...仔细想了一下,的确可能存在虽然我在学习MVC的方法,但是我编写代码的思路仍然落在旧的方法中的问题.所以诚心在这里向各位老师请教:前提:使用.netmvc3,razor语法.我希望在index显示页面中,显示我在数据库中查询到两张表的内容.sql查询语句:select*frommembersaleftjoinmembercallsbona.ID=b.membersidwherea.标识=0members表字段:ID姓名称呼性别me

查询-sql 未满足条件时再加一条数据

问题描述 sql 未满足条件时再加一条数据 有表aa : ID , PID 1 , 5 2 , 4 3 , 20 4 , 11 5 , 2 条件 PID<=10 就查询出前三条数据条件 PID<=6 就查询出前两条数据 要怎么写 解决方案 下面是oracle的,各个数据的取前2条和前三条关键字不一样,有些是top有些事limit,有些事rownum SELECT IDPID FROM AA WHERE PID<=10 AND ROWNUM<=3 UNION SELECT IDPID

select-mysql 在查询的时候能不能同时带模糊查询和条件查询?

问题描述 mysql 在查询的时候能不能同时带模糊查询和条件查询? 比如: select * from t_user where name = '张三' and sex like '%妖%' 解决方案 模糊匹配也是一种条件啊,,所以是可以的,, 解决方案二: 可以 select name,sex from t_user where name = "张三" and sex like '%妖%' 解决方案三: 当然可以,and相当于要求两个条件都满足才能返回结果 解决方案四: 肯定是可以的

mysql-MySQL中关联查询两个表的问题,在线等!!!急急急

问题描述 MySQL中关联查询两个表的问题,在线等!!!急急急 两个表的关联查询,却出现的笛卡尔积的问题,所以查出来的数据并不是我想要的 该怎么办呀 解决方案 你怎么查询的,关联的一侧不是主键或者唯一值,那么就是笛卡尔集. 解决方案二: 换言之,如果是N:N查询,那么所有匹配的组合都会被查询出来.确保你的查询是1:N N:1或者1:1 如果你一侧不是1,那么可以用distinct或者group by先变成唯一的. 解决方案三: 关联条件是如何做的 是不是有正确的join起来 解决方案四: 使用f

entity-hibernate查询时Criteria怎么根据级联的两个类里的属性进行查询?

问题描述 hibernate查询时Criteria怎么根据级联的两个类里的属性进行查询? 有3个表,A,B,C, 关系如下: A-->List,B属性有time等; A-->List,C属性有time等 Java代码: Entity: @OneToMany(fetch = FetchType.EAGER) @JoinColumn(name = "axxx_id") @Fetch(FetchMode.SELECT) public List getB() { return b;