Codeigniter where_in OR where_in

时间:2016-10-10 09:25:48

标签: php mysql codeigniter activerecord where-in

我使用codeigniter查询数据库,我需要有条件地比较where子句中的数组。

所以基本上我想做:where_in OR 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函数。

我可以这样做,还是需要重新考虑?

由于

2 个答案:

答案 0 :(得分:1)

我不确定这是不是你想要的:

if(!empty($users)){
    $this->db->where_in('user_id', $users);
}
elseif(!empty($areas)){
    $this->db->where_in('area_id', $areas);
}

答案 1 :(得分:0)

当你使用&#34;左&#34;然后在任何情况下加入从不使用&#34; where condition&#34;如or_where_inwhere_in,因为如果找不到,它会为该左侧查询生成array()。

$this->db->join('users u', 'u.id = b.check_user_id and u.id=' . $users, 'left');