products_id | id_parametr | id_value
1 1 2
1 2 3
2 1 1
Таблица 2 Товары products
id
1
2 - не должен выбираться, а фактически выбирается
Фильтр по параметрам формирует запрос такого вида (пример)
SELECT *
FROM products as p
LEFT JOIN params as pm ON p.id = pm.products_id
WHERE p.id IN
(
SELECT products_id FROM params WHERE id_parametr = 1 and id_value IN (1,2)
)
отбирает норм, но для 1 параметра.
Если 2 параметра
SELECT products_id FROM params WHERE (id_parametr = 1 and id_value IN (1,2, 3, 4))
OR (id_parametr = 2 and id_value IN (3,4))
выборка не соответствует запросу, т.к. выбираются все товары по параметрам 1 и 2, а должны товары по параметрам 1 и 2, но только если товары есть и в 1 и 2 параметре.
У меня получилось реализовать через выборку в цикле, поочередно исключая несоответствующие через array_intersect(), только для 3-х параметров, т.к. больше не требуется.
Вопрос: как реализовать красиво, чтобы одним запросом выбрать?