thinkphp 查询 and or and 50
thinkphp实现这样的查询:select*fromxwhere(id=1andname="2")or(id=1andname="3");我的处理是这样:$receiv...
thinkphp实现这样的查询:select * from x where (id=1 and name="2") or (id=1 and name="3");
我的处理是这样:
$receiveWhere1=array(
'deptid'=>$deptid,
'saleid'=>$saleid,
'_logic'=>'and'
);
$receiveWhere=array(
'openid'=>session('MyOpenId'),
'saledate'=>$today,
'_complex'=>$receiveWhere1,
'_logic'=>'or'
);
通过 fetchSql(true)得到的结果为:
LastSql: SELECT * FROM `receive` WHERE `openid` = 'obgR9wC' OR `saledate` = '2016-11-18' OR ( `deptid` = '01' AND `saleid` = '911600000136' )
很明显:结果为:id=1 or name="2" or (id=1 and name="3");
与:(id=1 and name="2") or (id=1 and name="3");相差太远;
------------------------------》求大神帮忙解决??
条件中出现了两个id=1,请你看成是一个是id=1,另一个为rid=1,即:
(id=1 and name="2") or (rid=1 and rname="3");
难道只能用这种吗?:
where(
"(deptid='%s' and saleid='%s') or (openid='%s' and saledate='%s')",
$deptid, $saleid, session('MyOpenId'), $today) 展开
我的处理是这样:
$receiveWhere1=array(
'deptid'=>$deptid,
'saleid'=>$saleid,
'_logic'=>'and'
);
$receiveWhere=array(
'openid'=>session('MyOpenId'),
'saledate'=>$today,
'_complex'=>$receiveWhere1,
'_logic'=>'or'
);
通过 fetchSql(true)得到的结果为:
LastSql: SELECT * FROM `receive` WHERE `openid` = 'obgR9wC' OR `saledate` = '2016-11-18' OR ( `deptid` = '01' AND `saleid` = '911600000136' )
很明显:结果为:id=1 or name="2" or (id=1 and name="3");
与:(id=1 and name="2") or (id=1 and name="3");相差太远;
------------------------------》求大神帮忙解决??
条件中出现了两个id=1,请你看成是一个是id=1,另一个为rid=1,即:
(id=1 and name="2") or (rid=1 and rname="3");
难道只能用这种吗?:
where(
"(deptid='%s' and saleid='%s') or (openid='%s' and saledate='%s')",
$deptid, $saleid, session('MyOpenId'), $today) 展开
展开全部
select * from x where (id=1 and name="2") or (id=1 and name="3");
可以这样写
select * from x where id=1 and name in("2","3");
in 里面可以有很多参数,如果in里面数据量比较大,可以用数组存储,如
$array = (1,2,3,4,5);
$str = '';
foreach($array as $val){
$str .= $val . ','; //将值后面拼接一个逗号
}
$array = rtrim($str,','); //将数组变成合法的字符串
select * from x where id=1 and name in($str);
这样也是批量操作的一个方法
如果这些不是你想要的,请将问题描述清楚,谢谢
可以这样写
select * from x where id=1 and name in("2","3");
in 里面可以有很多参数,如果in里面数据量比较大,可以用数组存储,如
$array = (1,2,3,4,5);
$str = '';
foreach($array as $val){
$str .= $val . ','; //将值后面拼接一个逗号
}
$array = rtrim($str,','); //将数组变成合法的字符串
select * from x where id=1 and name in($str);
这样也是批量操作的一个方法
如果这些不是你想要的,请将问题描述清楚,谢谢
追问
哥们,SQL,我写有点不好,应该是这样写 :
也就是问题变成了这样:
thinkphp实现这样的查询:select * from x where (deptid=1 and saleid="2") or (openid=1 and saledate="3");
追答
抱歉,忘记了你条件里的字段名都不一样
既然sql语句你能写出来,可以用thinkphp的原生语句查询方法
$sql = select * from x where (deptid=1 and saleid="2") or (openid=1 and saledate="3");
M('表名不要前缀')->query($sql);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询