2015-01-14 60 views
0

這是(1):這個codeigniter查詢是如何執行的?

SELECT `message`, `from` FROM (`chat_messages`) WHERE `from` = '1' AND `delivered` = 1 OR `to` = '1' AND `delivered` = 1 

與此相同(2)

SELECT `message`, `from` FROM (`chat_messages`) WHERE (`from` = '1' AND `delivered` = 1) OR (`to` = '1' AND `delivered` = 1) 

我用來產生結果的笨方法鏈式查詢(1)是

$this->db->select('message,from')->from('chat_messages')->where(array('from' => $user, 'delivered' => 1))->or_where('to', $user)->where('delivered', 1); 

並生產(2)我用這個

$where = "(`from` = '1' AND `delivered` = 1) OR (`to` = '1' AND `delivered` = 1)"; 
$this->db->select('message,from')->from('chat_messages')->where($where); 

有人可以請解釋一下從上面寫出CI查詢的最佳方法嗎?在第一個例子中,AND是否優先?

+0

解釋什麼?布爾邏輯? SQL語法中AND與OR的優先級? php關聯數組如何工作? –

+0

SQL語法中AND與OR的優先次序..我編輯了問題@JamesAnderson .. – arshad

回答

1
$this->db->select('message,from')->from('chat_messages')->where(array('from' => $user, 'delivered' => 1))->or_where('to', $user)->where('delivered', 1); 

from = 'somthing' and delivered='something' or to='something' and delivered='something'

這段代碼創建查詢,因此產生錯誤的結果,按您的期待結果。第四個是正確的。你可以使用它。

+0

錯誤的結果?你能解釋一下爲什麼? – arshad

0

這是最好的方式

$where = "(`from` = '1' AND `delivered` = 1) OR (`to` = '1' AND `delivered` = 1)"; 
$this->db->select('message,from')->from('chat_messages')->where($where); 

只需記住1周的事情,在短期和乘法是,或者說是除了使每BODMAS規則並將其優先級。這是我們在編碼中遵循的一些實例。所以總是將AND與OR分開,如:

(`from` = '1' AND `delivered` = 1) OR (`to` = '1' AND `delivered` = 1)