Подтвердить что ты не робот

Как сделать выбор из того, где 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. Каждый раз, когда вызывается запрос, может быть много графств, которые нуждаются в поиске или только несколько.

Любая помощь по правильному пути решения этой проблемы будет оценена по достоинству.

4b9b3361

Ответ 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)