Я использую codeigniter для запроса к базе данных, и мне нужно условно сравнить массивы в предложении where.
В общем, я хочу сделать: where_in ИЛИ where_in в зависимости от того, какой массив содержит данные. Поэтому у меня будет либо массив user_id, либо массив area_id.
Я не уверен, как объединить сравнение where_in. Это запрос, который мне нужно исправить:
public function get_checks_test($org_id,$users,$areas) {
// get todays date
$todays_date = date("Y-m-d");
// build where array
$check_array = array('c.org_id =' => $org_id, 'c.status !=' => '0', 'c.due <=' => $todays_date);
// build query
$this->db->select('c.*,a.check_area_id,b.check_user_id,d.area_name,u.first_name,u.last_name');
$this->db->order_by('c.due', 'asc');
$this->db->where($check_array);
$this->db->where_in('user_id', $users);
$this->db->or_where_in('area_id', $areas);
$this->db->join('check_assigned_areas a','a.check_id = c.check_id','left');
$this->db->join('check_assigned_users b','b.check_id = c.check_id','left');
$this->db->join('areas d','d.area_id = a.check_area_id','left');
$this->db->join('users u','u.id = b.check_user_id','left');
$check_object = $this->db->get('checks c');
return $check_object->result();
}
Я не думаю, что есть функция or_where_in, которую я могу найти.
Могу ли я сделать это так или мне нужно переосмыслить?
Спасибо
Да, есть or_where_in функция в Codeigniter. Если понадобится дополнительная помощь, я с радостью помогу.
Thanx,
Удачного кодирования.
Я не уверен, что это то, что вы хотите:
if(!empty($users)){
$this->db->where_in('user_id', $users);
}
elseif(!empty($areas)){
$this->db->where_in('area_id', $areas);
}
Когда вы используете «левое» соединение, то в любом случае никогда не используйте «где условие» как or_where_in
а также where_in
потому что он сделает array () для этого левого запроса, если он не найден.
$this->db->join('users u', 'u.id = b.check_user_id and u.id=' . $users, 'left');