mysql "or" 查询操作顺序

Posted

技术标签:

【中文标题】mysql "or" 查询操作顺序【英文标题】:mysql "or" order of query operations 【发布时间】:2013-12-09 19:03:03 【问题描述】:

所以我正在使用 laravel 3,它在 mysql 数据库上使用 eloquent ORM。我有一个函数可以重复往返 SQL 服务器,并且我已经让它与我有限的测试用例一起工作,但我不能 100% 确定 sql 查询中的操作顺序,所以我是希望有人能给我一个想法,如果我是正确的。旧代码如下

    $notifications = Notification::where(condition-1-a)->where(condition-1-b)->get();
    foreach ($locations = DB::table(table)->where(propertyX)->get() as $location) 
        $extra_notifications = Notification::where(condition-2-a)->where(condition-2-b)->get();
        $notifications = array_merge($notifications,$extra_notifications);
    

我知道上面的代码可以工作,并且保持隔离,因为每个查询都作为它自己的实体运行,然后结果被合并,但是一旦你开始获得更多的位置,它需要很长时间才能运行。我试图通过只访问一次 sql server 来减少这种情况,并提出了这段代码。

    $notifications = Notification::where(condition-1-a)->where(condition-1-b);
    foreach ($locations = DB::table(table)->where(propertyX)->get() as $location) 
        $notifications = $notifications -> or_where(condition-2-a)->where(condition-2-b);
    
$notifications = $notifications->get();

我的问题是我不确定 or_where 是如何工作的。它会生成一个 sql 字符串,其中包含我熟悉的单词作为代码,但我不确定它们是否会以相同的方式工作。生成的字符串是

SELECT * FROM `notifications` 
    WHERE `condition-1-a` = ? AND `condition-1-b` = ? 
    OR `condition-2-a` = ? AND `condition-2-b` = ? 
    OR `condition-2-a` = ? AND `condition-2-b` = ? 
    OR `condition-2-a` = ? AND `condition-2-b` = ? 
    ... (etc depending on number of loop iterations)

我要查找的主要内容是确认查询的运行方式。我可以期望这样运行吗?

SELECT * FROM `notifications` 
    WHERE (`condition-1-a` = ? AND `condition-1-b` = ?) 
    OR (`condition-2-a` = ? AND `condition-2-b` = ? )
    OR (`condition-2-a` = ? AND `condition-2-b` = ? )
    OR (`condition-2-a` = ? AND `condition-2-b` = ? )
    ... [etc depending on number of loop iterations]

或者是否有其他一些 sql 语句的评估顺序?

(我编辑了一些变量名和代码的其他方面,我尽我所能将其归结为每个人都可以使用的东西,这样它就不是特定于我的情况)

【问题讨论】:

【参考方案1】:

MySQL operator precedence

AND 的优先级高于OR。您的第一个示例与您的第二个示例相同。

【讨论】:

以上是关于mysql "or" 查询操作顺序的主要内容,如果未能解决你的问题,请参考以下文章

MySQL "tinyInt1isBit or tinyint" 相关问题解析

在 MySql 查询中替换“OR EXISTS”,这样我可以获得更好的性能结果

MySQL“任何输入”查询?

[转]mongodb 查询条件:关系运算符"$lt", "$lte", "$gt", "$gte", "$ne

PHP操作Mysql数据库查询数据实例

怎么写ES or查询的query?