Страницы

Поиск по вопросам

четверг, 25 октября 2018 г.

Фильтрация по характеристикам товара

Есть таблица с характеристиками товаров и столбцами Good_ID, Field_ID, Value. Может быть сколько угодно записей с одним Good_ID и разными Field_ID и Value
Field_ID - это идентификатор определенной характеристики
Нужно написать запрос, чтобы выбирались Good_ID, которые удовлетворяют нескольким парам Field_ID и Value. По сути фильтрация по характеристикам товара.
Не могу придумать, как одним запросом выбрать из таблицы все товары, у которых цвет синий и вес до 1кг.
Обновление
Всем спасибо. В общем в итоге получилось реализовать вот так
SELECT DISTINCT Good_ID FROM chars WHERE Message_ID IN (SELECT Good_ID FROM chars WHERE Field_ID = 3 AND Value = 'серый') AND Message_ID IN (SELECT Good_ID FROM chars WHERE Field_ID = 2 AND Value = '3')
Если я не правильно составил запрос - поправьте плз.


Ответ

У Вас должна быть таблица со списком товаров. Типа goods. Т.е. Good_ID это id из этой таблицы. Далее, предположим, что:
Ваша таблица с характеристиками называется attributes Field_ID для цвета = 1 Field_ID для веса = 2
Тогда нужный Вам запрос будет выглядеть так:
SELECT g.* FROM goods g JOIN attributes aCo AS g.id=aCO.Good_ID AND aCo.Field_ID=1 AND aCo.value='синий' JOIN attributes aW AS g.id=aW.Good_ID AND aW.Field_ID=2 AND aW.value=1
Этот запрос покажет Вам все товары из таблицы goods, у которых цвет (Field_ID=1) синий, а вес (Field_ID=2) = 1.

У меня на сайтах реализована описанная Вами схема, поэтому позволю себе дать Вам совет: будет лучше, если Вы сделаете сводную таблицу всех товаров и их аттрибутов. Можно туда добавить другую информацию: цены, описания, названия, картинки...
Что-то типа такого:
Good_ID SKU title price a1 a2 a3 ------- --------- --------------------- ------ --- --- --- 2 [артикул] [наименование товара] 450.00 red 3 45 452 [артикул2] [наименование товара 2] 15.00 white 5 64
a1, a2, a3 - это значения аттрибутов 1, 2 и 3 (у Вас Field_ID). В зависимости от того, как часто меняется информация о товаре можно такую таблицу генерировать заново раз в час / несколько часов / раз в сутки.
Имея такую таблицу, Вам будет намного проще доставать данные из базы, делать отчеты, можно сделать быстрый (очень быстрый) поиск на сайте (ведь запросы любой сложности будут всегда в одну таблицу)... ну еще много всего....
Очень советую.

Комментариев нет:

Отправить комментарий