2015-09-02 2 views
0
SELECT b_id,b_thumb1,b_thumb2,b_league,b_date,b_status 
FROM battles 
WHERE b_userid1=? OR b_userid2=? 
AND b_status=1 OR b_status=2 
ORDER BY b_date DESC 

Это выбирает строки, где b_status = 0, а не просто 1 или 2. Может кто-то указать мне верное направление?два или утверждения MySQL Query

+0

если знак вопроса должен быть равен нулю, это означает, что 'b_userid1 = 0' или' b_userid2 = 0 AND b_status = 1' или 'b_status = 2'. Если вы хотите получить правильный уход для [преференции] (https://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html) – SomeJavaGuy

+2

ГДЕ (b_userid1 =? ИЛИ b_userid2 =?) И (b_status = 1 ИЛИ b_status = 2)? – jarlh

+0

@jarlh, который сработал, спасибо – frosty

ответ

1

Я думаю, вы должны добавить () в where заявление.

SELECT b_id,b_thumb1,b_thumb2,b_league,b_date,b_status 
FROM battles 
WHERE (b_userid1=? OR b_userid2=?) 
AND (b_status=1 OR b_status=2) 
ORDER BY b_date DESC 

Маленький совет на вашем SQL, используйте IN заявление заменить несколько OR заявление.

SELECT b_id,b_thumb1,b_thumb2,b_league,b_date,b_status 
FROM battles 
WHERE (b_userid1 in (?, ?)) 
AND (b_status in (1, 2)) 
ORDER BY b_date DESC 
0
SELECT b_id,b_thumb2,b_league,b_date,b_status 
FROM battles 
WHERE (b_userid1=? OR b_userid2=?) 
AND (b_status=1 OR b_status=2) 
ORDER BY b_date DESC 

Это даст вам результат, где b_userid равно одному из двух параметров, а статус 1 или 2.

SELECT b_id,b_thumb2,b_league,b_date,b_status 
FROM battles 
WHERE b_userid1=? OR b_userid2=? 
AND b_status=1 OR b_status=2 
ORDER BY b_date DESC 

Это будет возвращать результаты, где b_userid1 является равный первому параметру или b_userid2, равно второму параметру и статусу = 1 или b_status = 2 (вероятно, порядок операций над sql является довольно сложным).

Так оно равно это:

SELECT b_id,b_thumb2,b_league,b_date,b_status 
FROM battles 
WHERE (b_userid1=?) OR (b_userid2=? 
AND b_status=1) OR (b_status=2) 
ORDER BY b_date DESC 

, которая не совсем то, что вы хотите.