gpt4 book ai didi

php - mysql "or"查询操作的顺序

转载 作者:行者123 更新时间:2023-11-29 08:16:41 25 4
gpt4 key购买 nike

所以我正在使用 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 服务器来减少这种情况,并提出了这段代码。

    $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 语句评估顺序吗?

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

最佳答案

MySQL operator precedence

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

关于php - mysql "or"查询操作的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20478566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com