php数组查询并列条件,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.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值