Задать вопрос
@viktorross

Как грамотно сделать поиск по фильтрам и где хранить характеристики?

Здравствуйте, подскажите пожалуйста как правильно хранить характеристики товаров для последующей выборке через фильтры? Сейчас у меня все фильтры привязаны по id к каждой категории, у каждого фильтра соответственно свое имя поля, так вот, существует также таблица в которой хранится около 50 тыс товаров, ну и соответственно все имена фильтров , которые существуют аналогично созданы и в таблице товаров, образно говоря 200 штук фильтров по характеристикам и 200 полей в таблице товаров с этими же именами, естественно у каждого товара 20-30 полей заполнено, а остальные со значением null, логично, что это полнейший бред, да и работает это с каждым новым полем медленнее и медленнее, если добавить еще 200 полей с фильтрами, а мне нужно их больше 1500 тыс, то сервер mysql вообще ляжет после 100 одновременных запросов, как сделать так, чтобы были заполнены для каждого товара только нужные поля без всяких null, и не в одной таблице с товарами , плюс так чтобы можно было по этим полям делать поиск, т.е без json. Не совсем понимаю, как быть если фильтров 1500 тысячи и соответственно вариантов полей, так или иначе получается, что все равно нужно чтобы было 1500 полей в какой-то таблице, но в mysql столько полей и не создать на сколько я знаю в одной таблице
  • Вопрос задан
  • 228 просмотров
Подписаться 1 Простой 5 комментариев
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Для неоднородных сущностей с произвольными наборами свойств обычно используют EAV таблицы, что позволяет создать любой набор свойств для любого экземпляра сущности (например уникальные свойства для каждого товара).

Минус - для поиска нужно строить достаточно объемные запросы, не помещающиеся в обычную логику по типу "селект вэа..." и требующие некоторого конструктора запросов. Так же, в большинстве случаев скорость запросов будет падать с ростом используемых атрибутов, но тут как раз нужно будет использовать фасетный поиск, то есть для группы товаров можно резко ограничить выборку через признак группы атрибутов, свойственные только этой группе, что сужает выборку и ускоряет поиск по тарибутам.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽