Как сделать выбор из того, где x равно нескольким значениям?
Итак, я ', отлаживая некоторый код, и есть следующий SQL-запрос (упрощенный от того, что он на самом деле).
SELECT ads.*, location.county
FROM ads
LEFT JOIN location ON location.county = ads.county_id
WHERE ads.published = 1
AND ads.type = 13
AND ads.county_id = 2
OR ads.county_id = 5
OR ads.county_id = 7
OR ads.county_id = 9
Я получаю очень странные результаты из запроса, и я думаю, что это потому, что первый OR отрицает AND, который перед ним. Поэтому я возвращаю результаты для объявлений всех типов, а не только типа 13. Каждый раз, когда вызывается запрос, может быть много графств, которые нуждаются в поиске или только несколько.
Любая помощь по правильному пути решения этой проблемы будет оценена по достоинству.
Ответы
Ответ 1
Поместите скобки вокруг "ИЛИ":
SELECT ads.*, location.county
FROM ads
LEFT JOIN location ON location.county = ads.county_id
WHERE ads.published = 1
AND ads.type = 13
AND
(
ads.county_id = 2
OR ads.county_id = 5
OR ads.county_id = 7
OR ads.county_id = 9
)
Или даже лучше, используйте IN:
SELECT ads.*, location.county
FROM ads
LEFT JOIN location ON location.county = ads.county_id
WHERE ads.published = 1
AND ads.type = 13
AND ads.county_id IN (2, 5, 7, 9)
Ответ 2
Вы можете попытаться использовать круглые скобки вокруг выражений OR, чтобы убедиться, что ваш запрос интерпретирован правильно или более сжато, используйте IN:
SELECT ads.*, location.county
FROM ads
LEFT JOIN location ON location.county = ads.county_id
WHERE ads.published = 1
AND ads.type = 13
AND ads.county_id IN (2,5,7,9)
Ответ 3
И даже проще использовать IN:
SELECT ads.*, location.county
FROM ads
LEFT JOIN location ON location.county = ads.county_id
WHERE ads.published = 1
AND ads.type = 13
AND ads.county_id IN (2,5,7,9)