Здравствуйте, помогите пожалуйста с запросом..
Есть несколько таблиц со свойствами товаров. Упростим до 3
1. property - названия свойств (например: мощность прибора)
id name type ...
2. property_values - значения для определённого свойства (100вт 200вт 300вт и тд.)
id property_id value
3. property_values_relations - связь значения свойства и продукта
id_product id_property id_value value
Вот давайте пока на поле value не обращаем внимание...
Приходят с клиента определенные значения свойств по которым нужно отфильтровать продукты, например:
SELECT
id_product
FROM katalog_products pr
LEFT JOIN property_values_relations rel ON rel.id_value IN (id_начений_свойств, ...)
WHERE rel.id_product = pr.id
GROUP BY id_product
Выдернули продукты по определённым свойствам.
Позже стало нужно что бы фильтровали не по готовым на выбор вариантам, а по тем который указан, например пробег авто в километрах, вписывают в продукт 50000.
Для этого ввели поле value
На клиенте для таких полей стоят фильтры, два поля ОТ и ДО, например, он вписывает от 10000 - 100000
Отдельно для этих фильтров запрос такой:
SELECT
id_product
FROM property_values_relations
WHERE
(`id_value` = 339 AND `value` BETWEEN 1996 AND 2000)
OR
(`id_value` = 341 AND `value` BETWEEN 90 AND 180)
OR ...
OR ...
GROUP BY id_product
HAVING COUNT(*) = 2
HAVING COUNT(*) = 2 - Количество таких фильтров
Если какой то продукт не прошёл по какому-то фильтру - от откинется.
Вот не могу додуматься как сделать запрос что бы он сначала фильтровал по id` шникам свойств, а потом откидывал те которые не прошли по диапазонным фильтрам.
Помогите пожалуйста, уже неделю пытаю mysql... Хоть совет или пример как пробовать сделать...
Спасибо.