@Gopa

Как написать mysql запрос?

5ed134bf8bc4c396783027.png
Есть таблица с product_id и id фильтра-значения. На сайте есть фильтр. При фильтрации получаем массив id фильтра-значений.
Как получить все product_id, у которых присутствую все id фильтров значений.

Например как получить product_id, где в столбце av_id присутствуют значения 3,11,15. В случае как на картинке вернется product_id = 87.
А если будут значения 2,3, то вернется product_id = 87 и product_id = 305.

Или может есть более оптимальная структура?
  • Вопрос задан
  • 95 просмотров
Пригласить эксперта
Ответы на вопрос 4
BojackHorseman
@BojackHorseman Куратор тега MySQL
...в творческом отпуске...
3 раза exists
или 3 раза join

посмотреть на план, выбрать оптимальный
Ответ написан
tsklab
@tsklab Куратор тега SQL
Здесь отвечаю на вопросы.
SELECT product_id FROM 
(
SELECT product_id FROM T WHERE av_id = 3
UNION ALL
SELECT product_id FROM T WHERE av_id = 11
UNION ALL
SELECT product_id FROM T WHERE av_id = 15
) AS F
GROUP BY product_id
HAVING COUNT(*) = 3

SELECT product_id FROM 
(
SELECT product_id FROM T WHERE av_id = 3
UNION ALL
SELECT product_id FROM T WHERE av_id = 2
) AS F
GROUP BY product_id
HAVING COUNT(*) = 2
Ответ написан
@DmitriyGordinskiy
SELECT product_id
FROM table_name
WHERE av_id IN (3, 11, 15)
GROUP BY product_id 
HAVING COUNT(DISTINCT av_id) = 3
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы