Ребят, в бд есть таблица с названием фильтров - sorting (поля: id, title), с пунктами фильтров - options (поля: id, sorting_id - id фильтра, title), таблица с товарами - products (поля: id, title, price), таблица с характеристиками товара - parameters (поля: id, product_id, option_id - id пункта в фильтре, value).
Помогите реализовать выборку товара по указанным фильтрам, сам написал запрос к бд, но работает некорректно:
SELECT `products`.`id`, `products`.`title`, `products`.`price`, count(*) as cnt
FROM `products`
INNER JOIN `parameters`
ON `products`.`id` = `parameters`.`product_id`
WHERE (`parameters`.`value`
IN (3,8))
GROUP BY `products`.`id`
HAVING cnt = 2
ORDER BY `products`.`price`
3 и 8 - id выбранных пунктов в фильтрах, они могут быть из одного фильтра или из разных HAVING cnt = 2 указывает количество используемых фильтров.
Если поместить группировку параметров в подзапрос, то фильтр должен заработать.
SELECT p.`id`, p.`title`, p.`price`
FROM `products` AS p
INNER JOIN (
SELECT `product_id`
FROM `parameters`
WHERE `value` IN (3,8)
GROUP BY `product_id`
HAVING COUNT(*) = 2
) AS x ON x.`product_id` = p.`id````
Сборка персонального компьютера от Artline: умный выбор для современных пользователей