@viktorross

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

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

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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
от 300 000 до 500 000 ₽
01 мая 2024, в 12:46
150000 руб./за проект
01 мая 2024, в 12:23
100000 руб./за проект
01 мая 2024, в 12:20
50000 руб./за проект