Фильтр товаров в интернет магазине

79
22 января 2022, 12:40

Ребят, в бд есть таблица с названием фильтров - 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 указывает количество используемых фильтров.

Answer 1

Если поместить группировку параметров в подзапрос, то фильтр должен заработать.

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````
READ ALSO
выводятся только первые строки таблицы

выводятся только первые строки таблицы

в БД есть таблица с данными продуктов из которых для каждого продукта должны выводиться определённые данныеНо в продуктах все данные повторяются

91
Как разгрузить веб-сервер от ajax?

Как разгрузить веб-сервер от ajax?

Сейчас на сайте всё происходит (автообновление статистики, обмен сообщениями и тд) через AJAXЗнаю, способ не совсем элегантный, но рабочий

94
Динамические запросы с параметрами в MySQL

Динамические запросы с параметрами в MySQL

Курил документацию по MySQL и не до конца понял, как передавать аргументы в динамический запрос

65