2016-05-30 9 views
0

Ich habe die folgende SQL:MySQL Abfragefilter richtig, einige, wo die Bedingungen werden ignoriert

SELECT * FROM LISTING WHERE 

paused = 0 and city = 3 or city = 1 or city = 2 
and rent = 1 and bedrooms = 1 and type = 1 

mein Ergebnis ist, dass: die Bedingung erfüllt ist, dass city = 3 or city=1 or city=2

aber den Rest ignoriert: and rent = 1 and bedrooms = 1 and type = 1

Ich möchte das Ergebnis mehrere Städte haben, aber die Anforderungen: and rent = 1 and bedrooms = 1 and type = 1 erfüllt werden, im Moment gibt es nur Ergebnisse für mehrere Städte ohne weitere Filter von Miete, Schlafzimmer, Typ.

bitte hilfe, danke.

+0

Sie mischen 'und' und' oder' ohne '()', um die gewünschte Analyse/Ausführungsreihenfolge zu erzwingen. Sie müssen nachlesen über [Operator Vorrang] (http://dev.mysql.com/doc/refman/5.7/en/operator-precedence.html) –

+0

Es ist interessant. Die Antwort, die du ausgewählt hast, ist genau die gleiche wie meine. Aber es wurde später als meins veröffentlicht. Kann ich wissen, warum Sie das anstelle meiner Antwort ausgewählt haben? – Mojtaba

+0

Es tut mir leid, dass ich nicht wusste, dass du zuerst gepostet hast, ich werde es reparieren;) – Mikail

Antwort

0

benötigen Sie den OR Teil

SELECT * FROM LISTING WHERE 

paused = 0 and (city = 3 or city = 1 or city = 2) 
and rent = 1 and bedrooms = 1 and type = 1 

Der bessere Weg zu teilen ist:

SELECT * FROM LISTING WHERE 

paused = 0 and city IN (1,2,3) 
and rent = 1 and bedrooms = 1 and type = 1 
0

Ändern Sie es an:

SELECT * FROM LISTING WHERE 

paused = 0 and (city = 3 or city = 1 or city = 2) 
and rent = 1 and bedrooms = 1 and type = 1; 

ODER

SELECT * FROM LISTING WHERE 

paused = 0 and city IN (1,2,3) 
and rent = 1 and bedrooms = 1 and type = 1; 
1

Da Sie mehrere OR Bedingungen verwenden, wäre es besser, die IN Klausel zu verwenden.

SELECT * FROM LISTING 
WHERE paused = 0 
AND city IN (1, 2, 3) 
AND rent = 1 
AND bedrooms = 1 
AND type = 1