#mysql
Есть таблица с характеристиками товаров и столбцами 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')
Если я не правильно составил запрос - поправьте плз.
Ответы
Ответ 1
У Вас должна быть таблица со списком товаров. Типа 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). В зависимости от того, как часто меняется информация о товаре можно такую таблицу генерировать заново раз в час / несколько часов / раз в сутки. Имея такую таблицу, Вам будет намного проще доставать данные из базы, делать отчеты, можно сделать быстрый (очень быстрый) поиск на сайте (ведь запросы любой сложности будут всегда в одну таблицу)... ну еще много всего.... Очень советую.Ответ 2
Что-то похожее на это, можно попробовать: SELECT Good_ID FROM table WHERE (Field_ID in(идентификатор цвета, идентификатор веса) AND (Value=параметр отвечающий за синий or Value<=1)) GROUP BY Good_ID HAVING Count(*)=2
Комментариев нет:
Отправить комментарий