我正在使用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_details
。user_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语句?
谢谢,
答案 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')