$where["_complex"] = [
's.approve_status' => 0,
's.grant_status' => 1,
's.approve_status&e.status' => [1, 0, '_multi' => true],
's.approve_status&e.status&s.grant_status' => [1, 1, 0, '_multi' => true],
'_logic' => 'or',
];
tp3.2 or里面加且可以这样用
打印如下:
where 1=1 AND ( s.approve_status = 0 OR ( (s.approve_status = 1) AND (e.status = 0) ) OR ( (s.approve_status = 1) AND (e.status = 1) AND (s.grant_status = 0) ) OR s.grant_status = 1 )
$where["_complex"] = [
['relate_id'=>1,'relate_type' => 2],
['relate_id'=>2,'relate_type' => 1],
'_logic' => 'or',
];
等于
$where["_complex"] = [
['relate_id&relate_type' => [1, 2, '_multi' => true]],
['relate_id&relate_type' => [2, 1, '_multi' => true]],
'_logic' => 'or',
];
$where["_complex"] = [
'relate_id&relate_type' => [1, 2, '_multi' => true],
'relate_id&relate_type' => [2, 1, '_multi' => true],
'_logic' => 'or',
];这种是错误的,key会被覆盖
如果是内部or 外部and
// 假设你的表名为 user
$tableName = 'user';
// 构建查询语句
$query = M($tableName)
->where(array(
'_complex' => array(
array('uid' => 1, 'did' => 2, '_logic' => 'OR'),
array('uid' => 2, 'did' => 2, '_logic' => 'OR'),
'_logic' => 'AND'
)
))
->select();
// 执行查询
$result = $query->select();
执行结果:SELECT `uid`,u.name FROM web_user u WHERE ( ( u.uid IN ('40') OR u.did IN ('228') ) AND ( u.uid IN ('40') OR u.did IN ('228') ) ) AND u.company_id = '1' LIMIT 0,15