目前在Laravel中运行查询但预期输出不正确。所以,似乎我仍然不知道使用where/orwhere
的正确方法。我在下面有两个问题;
QUERY 1(a)
//total friends
$user = Friend::select('friend_sender', 'friend_receiver')
->where('friend_sender', Input::get("user_id"))
->orwhere('friend_receiver', Input::get("user_id"))
->where('friendship_status','friends')->count();
QUERY 1(b)
//total friends
$user = Friend::select('friend_sender', 'friend_receiver')
->where('friendship_status','friends')
->where('friend_sender', Input::get("user_id"))
->orwhere('friend_receiver', Input::get("user_id"))->count();
这两个查询会产生不同的结果。 QUERY 1 (a)
结果为0
,这在我自己的示例中是正确的,QUERY 1 (b)
结果为1
这是错误的。
现在,我假设其他WHEREs
应该在WHERE/orWHERE
语句之后。我写了另一个查询,但没有得到所需的结果。
$user = Friend::select('friend_sender', 'friend_receiver')
->where('friend_sender',Input::get("user_id"))
->orwhere('friend_receiver',Input::get("user_id"))
->where('sender_follow', 'yes')
->orwhere('receiver_follow', 'yes')
->where('friendship_status', 'friends')->count();
我的问题是,如何正确使用WHERE/orWHERE
?
答案 0 :(得分:1)
请参阅the documentation中的此示例:
DB::table('users')
->where('name', '=', 'John')
->orWhere(function($query)
{
$query->where('votes', '>', 100)
->where('title', '<>', 'Admin');
})
->get();
闭包将告诉:首先是AND,然后是OR条件。
答案 1 :(得分:1)
了解mysql的运算符优先级:http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html
在您的示例中,第一个查询与以下内容相同:
select
columns
from
table
where
column1 = value1
or
(column2 = value2 and column3 = value3)
而另一个查询与以下内容相同:
select
columns
from
table
where
(column3 = value3 and column1 = value1)
or
column2 = value2
&#39; AND&#39;将首先由sql评估,这就是为什么它产生不同的结果