@helixly

SQL запрос для фильтра характеристик?

Добрый день!

Есть таблица с хранением характеристик товара:

PropertyPivot
id
product_id
property_id
option_id

У меня на самом деле 2 вопроса. Первый, подскажите какую структуру использовать для множественных значений свойств. Просто создавать в базе еще одну такую запись, с другим значением?

И второй вопрос, помогите с формулировать SQL запрос для фильтрации по этим характеристикам. Пример, если например я выбираю Дверь - С зеркалом и наружний цвет - Светлый, чтобы в итоге выбралась только та дверь которая и с зерклалом и белого цвета, а не те и другие вместе.

Заранее спасибо!
  • Вопрос задан
  • 1242 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT `p`.*
  FROM `products` AS `p`
  JOIN `PropertyPivot` AS `pp1` ON `pp1`.`product_id` = `p`.`id`
    AND `pp1`.`property_id` = :p1_property AND `pp1`.`option_id` = :p1_value
  JOIN `PropertyPivot` AS `pp2` ON `pp2`.`product_id` = `p`.`id`
    AND `pp2`.`property_id` = :p2_property AND `pp2`.`option_id` = :p2_value
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@JuniorNoobie
Сижу в поддержке, пишу мелкие проекты
Могу предложить три варианта:
1) Делаем все одним запросом, что-то типа:
SELECT product_id
FROM PropertyPivot
WHERE property_id IN (...) AND option_id IN (...)
GROUP BY product_id
HAVING count(*) = количество параметров поиска


2) Последовательный отсев кандидатов по каждому параметру. Например, пришел поиск по трем параметрам. Мы сначала делаем выборку по одному параметру, сохраняем промежуточные данные, затем делаем выборку по промежуточным данным по второму параметру и т.д.

3) Самый, как мне кажется, изощренный вариант. Строим pivot-таблицу по параметрам поиска, соединяем ее с таблицей товаров по product_id, вешаем условие и сохраняем запрос...
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы