使用foreach循环在codeigniter中添加OR WHERE语句

时间:2017-01-08 06:40:16

标签: php mysql arrays codeigniter

我正在使用codeigniter框架,我想使用foreach循环创建一个OR WHERE语句,

以下是我的代码,

$wh_q = array('ec_date >' => $start, 'ec_date <=' => $end);

这将生成WHERE ec_details.date > '2016-11-01 00:00:00' AND ec_details.date <= '2017-01-07 00:00:00'

的查询

现在,我想在AND ec_details的abover查询字符串中添加更多条件。user_id =&#39; 5&#39;或ec_detailsuser_id =&#39; 6&#39;等等。

现在user_id,5和6来自数组结果,

$user_string = '5,6';
$users_array = explode(",",$user_string);

foreach ($users_array as $user) {
   $query = array('ec_details.user_id' => $user);
}

然后我合并原始$query数组

中的$wh_q数组
$wh_q = array_merge($wh_q, $query);

最后我选择下面的地方,

$this->db->where($wh_q);

但这不会产生我所需的查询,但只会创建如下,

`WHERE `ec_details`.`date` > '2016-11-01 00:00:00' AND `ec_details`.`date` <= '2017-01-07 00:00:00'`AND `ec_details`.`user_id` = '6'`

如何在codeigniter中使用foreach循环添加AND OR WHERE语句?

谢谢,

3 个答案:

答案 0 :(得分:1)

你可以这样试试, 创建一个完整的where字符串

$where = "name='Joe' AND status='boss' OR status='active'";
$this->db->where($where);

并检查,这将有效。

修改

或者你可以给予或者这样的条件

$this->db->where('name !=', $name);
$this->db->or_where('id >', $id);  // Produces: WHERE name != 'Joe' OR id > 50

答案 1 :(得分:1)

尝试如下......

$wh_q = array('ec_date >' => $start, 'ec_date <=' => $end);//condition first

$user_string = '5,6';
$users_array = explode(",",$user_string);

foreach ($users_array as $user) {
   $query []= array('ec_details.user_id' => $user);//second condition
}

//print_r($query) //multidimensional array

查询

$this->db->where($wh_q);

$total = count($query);
for($i=0;$i<$total;$i++){
    $this->db->or_where($query[$i]);
    }

答案 2 :(得分:0)

如果您只需要检查用户ID,那么您也可以像下面一样使用IN。

$user_string = '5,6'; $users_array = explode(",",$user_string); 
$this->db->where_in('id', $users_array);

并且如果您只想使用OR和And语句

然后使用下面的代码

$this->db->where('ec_date >',$start,false);
$this->db->where('ec_date <=', $end,false);
$user_string = '5,6';
$users_array = explode(",",$user_string);
$userqry = array();
foreach ($users_array as $user) {
   $userqry[] = "ec_details.user_id ='".$user."'";
}
$userqrystr = implode(" OR ",  $userqry);
$this->db->where($userqrystr,false,false);

此查询类似于

WHERE `ec_details`.`date` > '2016-11-01 00:00:00' AND `ec_details`.`date` <= '2017-01-07 00:00:00' AND (`ec_details`.`user_id` = '6' OR `ec_details`.`user_id` = '5')