2013-08-07 88 views
0

嵌套查詢我有笨devloped一個網站,我想創造一些條件的查詢和內側OR這樣的條件:笨循環

Select * from users where username = 'user' and nation_id = 90 and active = 1 and (rate = 1 OR rate = 2 OR rate = 3); 

現在我創建這個代碼,但不工作,因爲就像寫這個:

Select * from users where username = 'user' and nation_id = 90 and active = 1 and rate = 1 OR rate = 2 OR rate = 3; 

我不想這個查詢,但第一個。這是我的代碼:

$this->db->from('users'); 
$this->db->where('username', 'user'); 
$this->db->where('nation_id', 90); 
$this->db->where('active', 1); 

for ($i = 1; $i<=3; $i++){ 
    $this->db->or_where('rate', $i); 
} 

$query = $this->db->get(); 

請不要告訴我其他的方式像寫手動,因爲我已經簡化它並且是巨大的,使手動查詢查詢。
這個循環很重要,因爲我必須循環一個數組。
我只想插入我的或條件()是可能的?

+0

你從$ this-> db-> last_query()得到了什麼?而且,你確實注意到你正在從'service'選擇*而不是''用戶',對吧? – jcorry

+0

錯誤的複製,因爲我有很多查詢類似.. @jcorry –

+0

看起來像你可以使用'BETWEEN' – Brewal

回答

2

您可以使用$this->db->where_in(),例如像:

$opts = array(); 
for ($i = 1; $i <=3; $i++) { 
    $opts[] = $i; 
} 
$this->db->where_in('rate', $opts); 
+0

謝謝這就是我想要的 –

2

您可以使用此where_in方法:

$this->db->from('users'); 
$this->db->where('username', 'user'); 
$this->db->where('nation_id', 90); 
$this->db->where('active', 1); 
$this->db->where_in('rate' array(1, 2, 3)) 
$query = $this->db->get(); 

或者,你可以做同樣的事情與and_where方法並明確設置括號:

$this->db->from('users'); 
$this->db->where('username', 'user'); 
$this->db->where('nation_id', 90); 
$this->db->where('active', 1); 
// This produces: AND (rate = 1 OR rate = 2 OR rate = 3) 
$this->db->where('(rate = 1 OR rate = 2 OR rate = 3)') 
$query = $this->db->get(); 
+0

沒有我必須使用or_where條件的一個循環 –

+0

偶然使用'or_where '方法而不是'and_where'。 –

+0

對不起,但我必須使用循環..但你的功能可以在其他情況下工作+1 –

1

With t他BETWEEN運營商,你不必有一個循環:

$this->db->where("rate BETWEEN 1 AND 3"); 

這種方法是清潔的,因爲如果你把它1和150之間,你會不會有一個巨大的SQL查詢:rate IN (1, 2, 3, 4, 5, ... , 149, 150)只是rate BETWEEN 1 AND 150 。這似乎更適合。

+0

不,我需要的條件與循環使用 –

+0

我真的不明白爲什麼在這裏,除非你做一些在你的循環中進行測試,得到一個像'rate IN(1,3,7,9)'這樣的查詢 – Brewal