Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как лучше написать запрос для применения фильтра?  [new]
MLans
Member

Откуда:
Сообщений: 396
Здравствуйте, мне надо выполнить запрос для выборки товаров с применением фильтра.
У меня есть таблица, где хранятся значения для каждого параметра:

автор
id Parameter Value ProductId
1 Size 5 1
2 Size 7 2
3 Size 7 3
4 Price 150 1
5 Price 300 2
6 Price 400 3


Допустим мне надо выбрать только 7-й размер с ценой выше 350.
под этот фильтр подпадает товар #3?

Пока я пришел к идее использовать джойны, сколько фильтров, столько и джойнов

SELECT ProductId FROM ValuesTable
INNER JOIN (SELECT * FROM ValuesTable WHERE ... filter parameter..) T1 ON T1.ProductId = MainTable.ProductId
INNER JOIN (SELECT * FROM ValuesTable WHERE ... filter parameter..) T2 ON T2.ProductId = MainTable.ProductId
...

Корректный ли это способ?
27 окт 13, 21:07    [15038494]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше написать запрос для применения фильтра?  [new]
ROLpogo
Member

Откуда: Реутов
Сообщений: 216
MLans,

select
  VTS.ID
from ValuesTable VTS
  inner join ValuesTable VTP on VTP.ProductId = VTS.ID
where VTS.Parameter = 'Size' and VTS.Value = 7 and VTP.Parameter = 'Price' and VTP.Value > 350


P.S.: Это вы сами так таблицу спроектировали?
27 окт 13, 23:49    [15038960]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше написать запрос для применения фильтра?  [new]
Добрый Э - Эх
Guest
MLans,

задача твоя называется "реляционным делением", наиболее простые и понятные способы реализации построены на EXISTS-подзапросах или на группировке и HEAVING-фильтрации
28 окт 13, 05:06    [15039333]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше написать запрос для применения фильтра?  [new]
Добрый Э - Эх
Guest
Добрый Э - Эх
MLans,

задача твоя называется "реляционным делением", наиболее простые и понятные способы реализации построены на EXISTS-подзапросах или на группировке и HEAVING-фильтрации
28 окт 13, 05:08    [15039334]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше написать запрос для применения фильтра?  [new]
MLans
Member

Откуда:
Сообщений: 396
Спасибо!

автор
P.S.: Это вы сами так таблицу спроектировали?

Да, у меня можно добавять N параметров к товару, а что есть более лучший способ?
28 окт 13, 09:51    [15039683]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше написать запрос для применения фильтра?  [new]
MLans
Member

Откуда:
Сообщений: 396
where VTS.Parameter = 'Size' and VTS.Value = 7 and VTP.Parameter = 'Price' and VTP.Value > 350


Мне кажется сюда попадут товары с размером 7 и любой ценой, и с ценой > 350 и любыми размерами.
28 окт 13, 09:53    [15039688]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше написать запрос для применения фильтра?  [new]
ROLpogo
Member

Откуда: Реутов
Сообщений: 216
MLans, Я сперва подумал, что это и есть таблица товаров. Тогда запрос такой:

select
  VTS.ProductId
from ValuesTable VTS
  inner join ValuesTable VTP on VTP.ProductId = VTS.ProductId
where VTS.Parameter = 'Size' and VTS.Value = 7 and VTP.Parameter = 'Price' and VTP.Value > 350
28 окт 13, 12:49    [15040633]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить