получить mysql данные, где столбец имеет 2 значения - PullRequest
0 голосов
/ 30 мая 2020

У меня есть следующий mysql запрос:

SELECT * FROM `notifications` 
WHERE `receiverUserID` = 3 AND `status` = 0 AND `typ` = 1 OR `typ` = 2

результат:

enter image description here

Но мой запрос не верный. Результат должен показать мне только данные, где тип = 1 ИЛИ 2, статус = 0 и ReceiverUserID = 3

строка, где ReceiverUserID = 2 не должна отображаться. В чем моя ошибка?

Ответы [ 2 ]

3 голосов
/ 30 мая 2020

Вам нужно сократить область действия оператора ИЛИ, используя круглые скобки. Итак, ваш запрос должен быть

SELECT * FROM notifications
WHERE receiverUserID = 3 AND status = 0 AND (typ = 1 OR typ = 2 );

Edit 1 (полезный комментарий @jBuchholz)

Вот список приоритетов операторов в MySQL dev. mysql .com / doc / refman / 8.0 / en / operator-priority. html AND имеет более высокий приоритет, чем OR, и поэтому выполняется раньше (например, умножение выполняется перед сложением).

1 голос
/ 30 мая 2020

Вот что на самом деле делал ваш запрос:

SELECT * FROM
notifications
WHERE (receiverUserID = 3 AND status = 0 AND typ = 1) OR typ = 2;

Это связано с тем, что AND имеет больший приоритет , чем OR. Это объясняет, почему все эти typ = 2 записи появляются в вашем наборе результатов. Вам необходимо использовать круглые скобки для принудительного использования и / или logi c, которые вы имеете в виду:

SELECT * FROM
notifications
WHERE receiverUserID = 3 AND status = 0 AND (typ = 1 OR typ = 2);

Обратите внимание, что при использовании синтаксиса WHERE IN (...) это было бы спорным вопросом:

SELECT * FROM
notifications
WHERE receiverUserID = 3 AND status = 0 AND typ IN (1, 2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...