2013-03-19 137 views
0

我很抱歉問這個愚蠢的問題,但我對查詢有點困惑。混淆查詢

$this->db->select('user_package.status,user_package.remaining,user_package.date,package.pname,package.pcount'); 
$this->db->join('user_package','user_package.pid=package.pid','left'); 
$this->db->where('user_package.status','Active'); 
$this->db->or_where('user_package.status','Pending'); 
$this->db->where('user_package.uid',$rows->uid); 
$user_package=$this->db->get('package'); 

,這裏是在MySQL面板相似查詢我的結果運行檢查出把

Select up.status,up.remaining,up.date,p.pname,up.uid,p.pcount FROM user_package up LEFT JOIN package p ON up.pid=p.pid where up.status="Active" OR up.status="Pending" AND up.uid=7 

,這裏是查詢

mysql output

的輸出我想要的只是找到那些行的uid是7,並檢查他們的狀態是待定或活動。但輸出是不同的。它會帶出7和8 uid的Pending和Active記錄。

+1

你認爲什麼是'(其中up.status = 「活動」 OR up.status = 「待定」)和up.uid = 7'可能被解釋爲'where up.status =「Active」OR(up.status =「Pending」AND up.uid = 7)' – Patashu 2013-03-19 03:04:26

+0

你說得對。但如何在codeigniter中做到這一點? – 2013-03-19 03:07:20

+0

看看[這個stackoverflow帖子](http://stackoverflow.com/questions/6470267/grouping-where-clauses-in-codeigniter) – 2013-03-19 03:17:52

回答

0

而不是使用$這個 - > DB->其中嘗試使用$這個 - > DB-> where_in

這應該在結果限制爲只有你所需要的ID。

例如

$this->db->select('user_package.status,user_package.remaining,user_package.date,package.pname,package.pcount'); 
$this->db->join('user_package','user_package.pid=package.pid','left'); 
$this->db->where('user_package.status','Active'); 
$this->db->or_where('user_package.status','Pending'); 
$this->db->where_in('user_package.uid',$rows->uid); 
$user_package=$this->db->get('package'); 
0

你必須做這樣

$select = array(
       'up.status', 
       'up.remaining', 
       'up.date', 
       'p.pname', 
       'up.uid', 
       'p.pcount' 
      ); 
$status = array('Active','Pending');  

$this->db 
     ->select($select) 
     ->from('user_package up') 
     ->join('package p','up.pid = p.pid','left') 
     ->where_in('up.status',$status) 
     ->where('up.uid',$rows->uid) 
     ->get();