在CodeIgniter中对WHERE子句进行分组

时间:2015-03-31 11:36:01

标签: php mysql codeigniter

我有这样的查询。

WHERE (timetable_id = '1' 
       OR timetable_id = '2' 
       OR timetable_id = '3' 
       OR timetable_id = '4' 
       OR timetable_id = '5' 
       OR timetable_id = '6')

AND exam_name_id = '5'

但我不知道如何在 Codeigniter 中执行此操作。

我试过这个

while(@$i <= 6 {                         
   $this->db->or_where('timetable_id',$this->input->post('timetable_id'.$i));
   $i++;   
   }                    
$this->db->where('et.exam_name_id',5); 

但是上面的命令给出了像这样的输出

WHERE timetable_id = '1'
      OR timetable_id = '2' 
      OR timetable_id = '3' 
      OR timetable_id = '4' 
      OR timetable_id = '5' 
      OR timetable_id = '6'
      AND et.exam_name_id = '5'

这给出了所有输出。如何正确地做到这一点? 请注意我的查询中有()个大括号。

3 个答案:

答案 0 :(得分:2)

如果您使用CI 3.xx版本,则可以使用

$this->db->group_start();
while($i <= 6) {                         
   $this->db->or_where('timetable_id',$this->input->post('timetable_id'.$i));
   $i++;   
   }                    
$this->db->group_end();
$this->db->where('et.exam_name_id',5); 

在字符串

中的CI 2.xx版本传递条件中

答案 1 :(得分:1)

@$i = 1;
$n = $this->input->post('timetable_id'.$i);
$or_where = "(";
$or_where.="timetable_id = $n";
for ($i; $i <= 6; $i++) {
    $n = $this->input->post('timetable_id'.$i);
    $or_where.=" OR timetable_id = $n";
}
$or_where.=")";     
$this->db->or_where($or_where);

这将给出您期望的答案。

答案 2 :(得分:0)

你自己很难使用while循环。此外,如果您使用循环构建数字,我不明白为什么使用$this->input->post()。我会像这样使用for循环:

for ($i = 1; $i <= 6; $i++) {
    $this->db->or_where('timetable_id', $i);
}
$this->db->where('et.exam_name_id', 5);