2016-05-04 13 views
0

私のクエリは次のようになります。の(またはクエリ)間違った結果

select * 
from `games` 
    inner join `prowizja` on `prowizja`.`id_gry` = `games`.`id` 
where `games`.`status` = 2 and `games`.`winner_user_id` != 49 
and `games`.`owner_user_id` = 49 or `games`.`join_user_id` = 49 

重要と思うがゲーム. winner_user_id`ある= 49!。しかし、私はこのクエリアップの結果である:私はwinner_user_id 49との結果を受け、なぜ

enter image description here

誰かが私に言うことができるが、私は等号を望んでいません。 おかげ

+0

括弧を追加します。 – jarlh

答えて

2

おそらく、括弧でWHERE句の最後の2つの述部をラップする必要があります。

select * 
from `games` 
inner join `prowizja` 
on `prowizja`.`id_gry` = `games`.`id` 
where `games`.`status` = 2 and 
     `games`.`winner_user_id` != 49 and 
     (`games`.`owner_user_id` = 49 or `games`.`join_user_id` = 49) 
2

ANDORに優先しています。したがって、あなたのクエリに等しい:

あなたは

select * 
from games 
inner join prowizja on prowizja.id_gry = games.id 
where (games.status = 2 and games.winner_user_id <> 49) 
    and (games.owner_user_id = 49 or games.join_user_id = 49); 

結論になりたい

select * 
from games 
inner join prowizja on prowizja.id_gry = games.id 
where (games.status = 2 and games.winner_user_id <> 49 and games.owner_user_id = 49) 
    or games.join_user_id = 49; 

ANDORを混合するたびに括弧を使用します。

+0

マイナーシンタックスhiccupそこに私の友人 – RiggsFolly

+0

@ RiggsFolly:ありがとう。 –

0

クエリでは句が使用されているためです。要件に応じてクエリを更新します。あなただけが勝者ID 49のレコードを表示しない場合は、以下のクエリを使用することができます。

select * 
from `games` 
    inner join `prowizja` on `prowizja`.`id_gry` = `games`.`id` 
where `games`.`status` = 2 and `games`.`winner_user_id` != 49 
and (`games`.`owner_user_id` = 49 or `games`.`join_user_id` = 49)