2016-05-04 9 views
0

Meine Abfrage wie folgt aussehen:!Wrong Ergebnis (oder wo Abfrage)

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 

Wichtige Think ist Spiele . winner_user_id` = 49. Aber ich Ergebnis dieser Abfrage nach oben ist:

enter image description here

mir jemand sagen könnte, warum ich Ergebnis erhalten mit winner_user_id 49, aber ich will nicht Gleichen. Dank

+0

In Klammern. – jarlh

Antwort

2

Sie müssen wahrscheinlich die letzten beiden Prädikate der WHERE Klausel in Klammern wickeln:

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

AND hat Vorrang vor OR. Daher Ihre Abfrage entspricht: Verwenden Sie Klammern, wenn AND und OR Mischen:

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; 

, wo Sie es

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); 

Schlussfolgerung sein wollen.

+0

Minor Syntax Schluckauf dort mein Freund – RiggsFolly

+0

@RiggsFolly: Danke. –

0

Weil Sie verwenden oder Klausel in der Abfrage. Aktualisieren Sie Ihre Anfrage gemäß Ihrer Anforderung. Wenn Sie den Datensatz der Gewinner-ID 49 nicht anzeigen möchten, können Sie die folgende Abfrage verwenden.

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)