2011-09-07 43 views
0

當我在笨使用此它僅選擇最後一個數組索引笨並在其中(陣列)功能

$array = array("status !=" => "deleted", "status !=" => "concept"); 
$this->db->where($array); 

此使用多指數的結果如下:

SELECT * FROM (`table`) WHERE `status` != 'concept' 

任何人都知道爲什麼或知道更好的方法?

+0

這段代碼應該選擇的每一行鍼對'status'不等於'deleted'或'concept'。這是你想要的嗎?這是你得到的嗎? –

+0

@joseph更新了我的文章。我的目標是'WHERE狀態!=刪除AND狀態!=概念' –

+0

我跑了它,並得到這個:'選擇*從(\'表\')\'狀態\'!='刪除'AND \ 'status'' ='concept'' –

回答

2

既然你已經想通了的原因你自己(你只是重寫數組的鍵),你應該使用下列選項之一:

您可以在通過這一切作爲第一個參數的字符串:

$this->db->where("status != deleted AND status != concept")->get('table'); 

也可以使2個獨立的方法調用:

$this->db->where("status !=", "deleted") 
     ->where("status !=", "concept") 
     ->get('table'); 

第一個更簡單,但第二個更安全。

+0

那麼陣列的設置它不會在模型內部發生!我從配置文件中獲取where數組,該數組爲不同的條件設置不同的數組。第一個我認爲我會去的!我可以使配置中的數組字符串,它仍然會工作!謝謝! –

0

你做它應該工作的方式,或者你可以試試這個:

$array = array("status !=" => "deleted", "status !=" => "concept"); 
foreach($array as $k=>$v){ 
    $this->db->where($k,$v); 
} 
+0

這是沒有必要的。 OP的方式是正確的。閱讀文檔:http://codeigniter.com/user_guide/database/active_record.html。回到'$ this-> db-> where();',並看看方法編號3. –

+0

這是我考慮的一個選項,但我覺得奇怪的是它不會按照我寫的方式工作。奇怪。猜猜我會這樣做 –

+0

是的@Joseph Silber,但馬克說他不工作......有幾件事情可以,最好是嘗試理論... –

0

如果所有子句的列相同,比多個where() s更好/更清晰的選擇將是where_not_in()方法。 它不只是它說什麼 - 創建一個NOT IN (..)條款

使用範例:

$this->db->where_not_in('status', $bad_statuses);