简体   繁体   English

这个codeigniter查询如何执行?

[英]How does this codeigniter query executes?

Is this (1): 这是(1):

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

same as this (2) 与此相同(2)

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

The codeigniter method chained query I used to produce the result (1) is 我用来生成结果(1)的codeigniter方法链式查询是

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

and to produce (2) I used this 并产生(2)我用这个

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

Could someone please explain the best way(from the above) to write CI query? 有人可以从上面解释最好的方式来编写CI查询吗? Does AND get first priority here in the first example? 在第一个示例中,AND是否具有优先权?

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

this code make query like 这段代码使查询像

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

so it yields wrong result as per your expectation result. 因此,按照您的预期结果会产生错误的结果。 fourth one is correct. 第四个是正确的。 you can use it. 您可以使用它。

This is the best way 这是最好的方法

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

Just remember 1 thing that in short AND is multiplication, OR is addition so as per bodmas rule AND is on priority. 只需记住一件事,简而言之,AND是乘法,OR是加法,按照每个法则规则AND优先。 This is some sort of practical example which we follow in our coding. 这是我们在编码中遵循的一些实际示例。 So always separate AND, OR glue with brackets like: 因此,请务必用括号将AND,OR胶水分开,例如:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM