Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2013, 18:41   #1
zironix
Новичок
Джуниор
 
Регистрация: 28.04.2013
Сообщений: 2
По умолчанию Фильтр по характеристикам

В общем есть таблица товаров, есть таблица характеристик товаров,
таблица характеристик имеет столбцы:

product_id | feature_id | value

если я делаю WHERE feature_id='pp' and value IN ('8','8.7'), то все работает, но я не понимаю как сделать выбор по нескольким характеристикам, я пробовал:

WHERE (feature_id='pp' and value IN ('8','8.7')) OR (feature_id='pos' and value IN ('Android', 'iOS')) - возвращает все продукты у которых встречаются такие поля, с AND не возвращает ничего, мне же надо выбрать продукты, у которых есть обе характеристики c указанными значениями.

Буду благодарен за любую помощь.

Последний раз редактировалось zironix; 28.04.2013 в 18:54.
zironix вне форума Ответить с цитированием
Старый 28.04.2013, 19:07   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Не единстивенній вариант и наверно не самый оптимальный
Код:
SELECT T.*
  FROM Товары T
  WHERE EXISTS(SELECT * FROM характеристи H WHERE H.Id=T.Id AND H.feature_id='pp' and H.value IN ('8','8.7')) AND
        EXISTS(SELECT * FROM характеристи H WHERE H.Id=T.Id AND H.feature_id='pos' and H.value IN ('Android', 'iOS'))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.04.2013, 19:21   #3
zironix
Новичок
Джуниор
 
Регистрация: 28.04.2013
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Не единстивенній вариант и наверно не самый оптимальный
Код:
SELECT T.*
  FROM Товары T
  WHERE EXISTS(SELECT * FROM характеристи H WHERE H.Id=T.Id AND H.feature_id='pp' and H.value IN ('8','8.7')) AND
        EXISTS(SELECT * FROM характеристи H WHERE H.Id=T.Id AND H.feature_id='pos' and H.value IN ('Android', 'iOS'))
Спасибо, вроде работает,а я уже собирался выбирать через OR и в php убирать те товары, строк к которым вышло меньше чем характеристик.
zironix вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DS фильтр PIKACHU Мультимедиа в Delphi 17 23.01.2017 08:04
фильтр cookies Общие вопросы Delphi 4 14.02.2012 17:44
Фильтр mental БД в Delphi 4 22.08.2011 16:15
По каким характеристикам может не подойти видюха? Игорь007 Компьютерное железо 4 24.09.2008 18:12