您可以使用此方法在2个条件之间进行OR,默认情况下为AND
$query=db_select('users','u')->fields('u',array('uid','title','created','uid'));
$query->join('flag_content','fc' , 'u.uid = fc.content_id');
$db_or = db_or();
$db_or->condition('fc.fid', '5' , '=');
$db_or->condition('fc.uid', $uid , '=');
$query->condition($db_or);
$result = $query->execute()->fetchAll();
假设您有3个条件,并且可能有AND条件,并且如果您希望它像con1 AND con2 OR con3一样,并且在这种情况下甚至还有很多其他情况,则可以使用db_and,例如db_or,因为当您尝试使用db_or all时如果需要,db_or中的条件现在就可以使用了,在这些条件之间可以使用db_,这虽然很繁琐,但是可以在下面的示例中实现
$query = db_select('work_details_table','wd');
$query->join('work_table','w','wd.request_id = w.request_id');
$query->fields('w',array('client_id'));
$query->fields('wd');
$query->condition('wd.request_id',$request_id);
if($status == 5 || $status == 6 || $status == 7){
$query->condition('wd.status',$status);
}elseif($user_type == 'writer'){
$query->condition('wd.writer_id',$user_id);
$db_or = db_or();
$db_and = db_and();
$db_and->condition('wd.status',2);
$db_and->isNull('wd.editor_id');
$db_or->condition('wd.status',4);
$db_or->condition('wd.status',1);
$db_or->condition($db_and);
$query->condition($db_or);
}else if($user_type == 'editor'){
$query->condition('wd.editor_id',$user_id);
$db_or = db_or();
$db_and = db_and();
$db_and->condition('wd.status',2);
$db_and->isNotNull('wd.editor_id');
$db_or->condition('wd.status',3);
$db_or->condition($db_and);
$query->condition($db_or);
}
//-----------------------------------------------------------------------------------------
$completed_sku = $query->execute()->fetchAll();
这将使您了解如何在Drupal PDO查询中处理复杂和/或条件。
db_or()
在5个条件进行“与”运算的条件中,只有两个条件需要进行“或”运算时,也可以使用。在$query->where()
这种情况下,无需使用。