MySQL выбрать элемент из нескольких категорий не дает результатов

У меня есть этот SQL-запрос:

SELECT DISTINCT c.id, c.name 
FROM cars c LEFT JOIN 
     _rel_cars_categories rcc ON c.id=rcc.car_id 
WHERE (rcc.category_id=33 AND rcc.category_id=51) 
  AND c.status >=10

Столы:

К сожалению, он возвращает 0 результатов. Когда я заменяю И на ИЛИ, все работает нормально, но я хочу получить все, что есть в обеих этих категориях. Это также может быть 3, 4, 5... категорий. Как я могу получить правильный результат?

2 ответа

Решение

Чтобы выбрать автомобили с 33 и 51 как category_id, попробуйте это:

SELECT c.id, c.name 
FROM cars c JOIN 
     _rel_cars_categories rcc ON c.id=rcc.car_id 
WHERE rcc.category_id IN (33,51) AND c.status >=10
GROUP BY c.name
HAVING count( distinct rcc.category_id ) = 2

Ваша проблема здесь: WHERE (rcc.category_id=33 AND rcc.category_id=51),

Очевидно, что категория может быть только 33 или 51. То, что вы ищете, скорее всего, будет WHERE ID IN (33,51) который затем возвратит совпадение для любого из предоставленных значений.

Итак, ваш последний запрос должен выглядеть так:

SELECT DISTINCT c.id, c.name 
FROM cars c
LEFT JOIN _rel_cars_categories rcc ON c.id=rcc.car_id 
WHERE rcc.category_id IN (33,51) AND c.status >=10
Другие вопросы по тегам