riki-tik
Новичок
Здравствуйте! В ходе написания сайта-каталога в котором предполагается большое количество товаров, я столкнулся с проблемой которая зовется "фильтры". Дело в том, что нужно сделать гибкую систему фильтрации товаров, с учетом что при фильтрации сайт не будет провисать и фильтры могут иметь несколько типов, это может быть просто значение, а может быть диапазон.
Перепробовал несколько вариантов и не могу пока остановится на едином. Пока мне кажется лучшим вариантом - это привязка фильтров к категориям, а у продуктов уже указание значений.
Вот структура таблиц для фильтров из последних моих мыслей.
Здесь таблица products - это продукты(упрощенный вид), products_categories - это категории продукта(т.к. один продукт можно отнести к нескольким категориям), значения фильтров для конкретного продукта, categories - таблица категорий, categories_filters - фильтры категории, собственно сами фильтры(просто название, например title:Страна), filtes_values - это варианты фильтров (например Китай, США).
Но у меня не достаточно опыта в этом вопросе и мне кажется что придуманная мной система оставляет желать лучшего. То есть, выборка продуктов будет происходить посредством выбора id из products_filters, эта таблица будет прикреплена join`ом к products. Но! Если вариантов фильтрации несколько (например нужно выбрать товары из страны США, размером s), то каждый новый вариант придется добавлять отдельным join`ом! Мне кажется с точки зрения кода и производительности это неверно... И к тому же, в данном варианте не реализована система типов фильтров (например диапазон).
Я знаю что тут достаточно много опытных разработчиков которые наверняка сталкивались с подобной задачей. Не могли бы вы подсказать наиболее оптимальную систему фильтрации?
Перепробовал несколько вариантов и не могу пока остановится на едином. Пока мне кажется лучшим вариантом - это привязка фильтров к категориям, а у продуктов уже указание значений.
Вот структура таблиц для фильтров из последних моих мыслей.
Код:
Таблица: products
id
title
uri
description
Таблица: products_categories
id
product_id
category_id
Таблица: products_filters
id
filter_value_id
Таблица: categories
id
title
url
description
Таблица: categories_filters
id
category_id
filter_id
Таблица: filters
id
title
Таблица: filtes_values
id
filter_id
title
Но у меня не достаточно опыта в этом вопросе и мне кажется что придуманная мной система оставляет желать лучшего. То есть, выборка продуктов будет происходить посредством выбора id из products_filters, эта таблица будет прикреплена join`ом к products. Но! Если вариантов фильтрации несколько (например нужно выбрать товары из страны США, размером s), то каждый новый вариант придется добавлять отдельным join`ом! Мне кажется с точки зрения кода и производительности это неверно... И к тому же, в данном варианте не реализована система типов фильтров (например диапазон).
Я знаю что тут достаточно много опытных разработчиков которые наверняка сталкивались с подобной задачей. Не могли бы вы подсказать наиболее оптимальную систему фильтрации?