2015-03-31 76 views
0

我有这样的查询。在CodeIgniter中编组WHERE子句

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' 

但我不知道如何在执行此。

我试图此

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' 

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

回答

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); 

这会给你的预期的答案。

0

你让自己很难使用while循环。另外,我不明白你为什么使用$this->input->post(),如果你正在建立循环的数字。我会用一个for循环是这样的:如果您在使用CI 3.xx版本

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

我得到了和以前一样的结果 – 2015-03-31 12:01:10

+0

我在我的视图页中计数,所以我使用'$ this-> input-> post()' – 2015-03-31 12:02:34

+0

ok。请编辑您的OP(原始帖子),并提供您的控制器和您的视图,以便进一步了解您想要完成的工作 – CodeGodie 2015-03-31 12:11:41

2

那么你可以使用

$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版过关条件字符串

+0

它说'致命错误:调用未定义的方法CI_DB_mysql_driver :: group_start()' – 2015-03-31 12:41:03

+0

抱歉,刚刚看到。 ..你也发布了答案...'CI 3.xx'中可用的'group_start()'和'group_end()'函数,可能你正在使用CI 2.xx' – Girish 2015-03-31 12:43:06

+0

@PraveenSrinivasan看到这个http:// www.codeigniter.com/userguide3/database/query_builder.html#query-grouping – Girish 2015-03-31 12:44:06