Как проще реализовать фильтр товаров?

294
11 мая 2017, 13:49

Здравствуйте. Задача следующая: Реализовать создание Групп, в каждой Группе реализовать возможность создания полей(характеристик). После реализовать добавление товара, при добавлении товара выбираем ему ранее созданные характеристики из Групп, и задаем им значения.

Вопрос: Каким образом реализовать это, если учесть что для всего этого нужен будет фильтр, который должен будет отбирать товары по заданным параметрам, по созданным характеристикам.

Пример фильтра:

На мой взгляд вся сложность в том что заранее не определено сколько будет полей характеристик, так как они создаются через админку, поэтому не могу заранее построить запрос к базе.

Answer 1

Можно начать примерно с такой модели. В админке при добавлении новой группы товаров задаем им требуемые виды характеристик. Поле "тип" может принимать значения, например, "строка", "число","перечислимый". Его можно сделать например типа ENUM или числом и добавить еще таблицу с названиями этих типов. Или использовать некие кодовые обозначения, удобные программе. Для перечислимых типов в одноименной таблице заводим возможные значения параметра, на основе них будут формироваться выпадающие списки вроде "тип двигателя".

При добавлении товара выбираем и предлагаем задать все виды характеристик, определенные для данной группы товаров. С тем как хранить возможные значения есть варианты: можно в виде строки в единственное поле "Значение" (таблицы "Значения характеристик"), можно завести несколько колонок в зависимости от типа: строка, число или ссылка на ID перечислимого типа. Смотрите как вам удобнее.

Ссылочную целостность правда поддерживать на уровне БД можно только триггерами, могут потребоваться проверки, что бы к товару было невозможно добавить характеристики не его группы. И в случае единственного поля под значение контролировать для перечислимых типов, что в поле id существующей записи из таблицы перечислимых типов. А так же обеспечить невозможность удаления записи перечислимого типа, если она используется в каких то товарах.

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

READ ALSO
Как мне правильно сделать выборку из MySQL?

Как мне правильно сделать выборку из MySQL?

Здравствуйте! у меня есть три таблицы!

255
Парсинг вкладки Network в панеле разработчика (F12)

Парсинг вкладки Network в панеле разработчика (F12)

ЗдравствуйтеКак написать PHP-скрипт, который будет "заходить" в панель, переходить в Network, брать ссылку и парсить ее?

264
Помогите осознать

Помогите осознать

Есть такая задача:

167