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

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

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

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

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

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