2017-02-08 2 views
2

Я использую следующий запрос для получения данных из базы данных mysql, и я получаю неправильные данные. Я хочу, чтобы получить все данные с cart_Status 2 или 3, которые имеют view_Status от 1:Запрос Mysql возвращает неверные данные с предложением where

SELECT * FROM `cart` WHERE `view_Status` = 1 AND cart_Status = 2 OR `cart_Status` = 3 

Вот как выглядит моя структура данных и таблицы, как:

enter image description here

Но в результате , он возвращает что-то независимо от view_Status = 1, который не является моей целью.

возвращается:

enter image description here

Конечно, он не должен ничего возвращать! Но это так!

+1

Попробуйте 'SELECT * FROM' cart' WHERE 'view_Status' = 1 AND (cart_Status = 2 ИЛИ' cart_Status' = 3) ' –

ответ

3

Речь идет о предложении оператора.
Ваш запрос вычисляется как

SELECT * FROM `cart` WHERE (`view_Status` = 1 AND cart_Status = 2) OR `cart_Status` = 3 

Вы должны добавить круглые скобки:

SELECT * FROM `cart` WHERE `view_Status` = 1 AND (cart_Status = 2 OR `cart_Status` = 3) 
+1

К сожалению! Я забыл об этом. Спасибо :-) – Afshin

+2

Вызов оператора на любом языке программирования. – TheHe

1

Вы кажетесь изучать SQL. Используйте круглые скобки в предложении WHERE, особенно когда вы смешиваете AND и OR.

Однако в вашем случае, IN является лучшим решением:

SELECT c.* 
FROM `cart` c 
WHERE c.view_Status = 1 AND cart_Status IN (2, 3); 
1

Это проблема с операторами старшинства. Обычно AND выполняется до OR в языках программирования (считайте AND с умножением бит и OR с момента добавления бит и приоритета становится знакомым). Итак, ваше состояние:

`view_Status` = 1 AND cart_Status = 2 OR `cart_Status` = 3 

обрабатывается следующим образом:

(`view_Status` = 1 AND cart_Status = 2) OR `cart_Status` = 3 

, который приводит все строки с определенной cart_Status быть выбрано. Вы должны добавить скобки вокруг второго пункта:

`view_Status` = 1 AND (cart_Status = 2 OR `cart_Status` = 3) 

или, еще короче:

`view_Status` = 1 AND cart_Status IN (2, 3) 
2
SELECT * FROM `cart` WHERE `view_Status` = 1 AND (cart_Status = 2 OR `cart_Status` = 3) 

или лучше

SELECT * FROM `cart` WHERE `view_Status` = 1 AND cart_Status in (2, 3); 
Смежные вопросы