2015-03-31 72 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