powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с запросом
8 сообщений из 8, страница 1 из 1
Помогите с запросом
    #38325910
Creologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица с набором фильтров для товаров:



тут связь с таблицей prefix_items по внешнему ключу itrem_id.
Нужно выбрать товар с уникальной парой filter_id = value, то есть, например, при запросе

Код: sql
1.
SELECT item_id FROM prefix_items_filters WHERE (filter_id, value) IN ((6,9), (6,8), (1,5))

получать товар с id = 4

Я написал запрос такого вида:

Код: sql
1.
SELECT item_id FROM prefix_items_filters WHERE (filter_id, value) IN ((6,9),(6,8),(1,5)) GROUP BY item_id HAVING COUNT( * ) = 2



но он работает только, если нет совпадения в filter_id (=6, например), то есть при таком запросе возвращается пустой результат.

Верным ли будет запрос такого вида:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT item_id
FROM mio_items_filters
WHERE (
filter_id, value
)
IN (
( 6, 9 ) , ( 6, 8 ) , ( 1, 5 )
)
GROUP BY filter_id, value
HAVING COUNT( * ) =1



Заранее спасибо.
...
Рейтинг: 0 / 0
Помогите с запросом
    #38325917
Creologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Creologic,

хотя нет, последний запрос неверный, потому что не соблюдается при запросе уникальность каждой пары фильтр-значение, потому как при запросе

Код: sql
1.
SELECT item_id FROM prefix_items_filters WHERE (filter_id, value) IN ((6,7),(1,5)) GROUP BY filter_id, value HAVING COUNT( * ) = 1



я все равно получаю товар с id = 4
...
Рейтинг: 0 / 0
Помогите с запросом
    #38325975
Creologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По логике запрос такого вида

Код: sql
1.
SELECT item_id FROM prefix_items_filters WHERE ((filter_id = 6 AND value = 9) AND (filter_id = 6 AND value = 8) AND (filter_id = 1 AND value = 5))



должен давать валидный результат, но возвращается пустой.
...
Рейтинг: 0 / 0
Помогите с запросом
    #38326110
MikkiMouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Creologic,

Типа так:
Код: sql
1.
2.
3.
4.
5.
SELECT item_id 
FROM prefix_items_filters 
WHERE ((filter_id = 6 AND value = 9) OR (filter_id = 6 AND value = 8) OR (filter_id = 1 AND value = 5))
GROUP BY item_id
HAVING COUNT(item_id) = 3

?
...
Рейтинг: 0 / 0
Помогите с запросом
    #38326145
Creologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MikkiMouseCreologic,

Типа так:
Код: sql
1.
2.
3.
4.
5.
SELECT item_id 
FROM prefix_items_filters 
WHERE ((filter_id = 6 AND value = 9) OR (filter_id = 6 AND value = 8) OR (filter_id = 1 AND value = 5))
GROUP BY item_id
HAVING COUNT(item_id) = 3

?

Нет, к сожалению.
Тут важно понимать, что filter_id — это идентификатор группы фильтров, то есть когда filter_id одинаковый, как в первых двух логических выражениях (=6), то там идет логика ИЛИ, а в третьем должна уже идти логика И, т.к. идентификатор группы фильтров уже = 1.

Вот картинка для понимания:



то есть в группе фильтров «Тип ткани» идет логика ИЛИ, но с группой фильтров «Размер» у «Тип ткани» уже логика И.
...
Рейтинг: 0 / 0
Помогите с запросом
    #38326154
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Creologicто есть в группе фильтров «Тип ткани» идет логика ИЛИ, но с группой фильтров «Размер» у «Тип ткани» уже логика И.
так и сделайте так, как пишите
Код: sql
1.
2.
3.
4.
5.
6.
SELECT item_id 
FROM prefix_items_filters 
WHERE (filter_id = 6 AND value in (8, 9)) 
   OR (filter_id = 1 AND value = 5))
GROUP BY item_id
HAVING COUNT(distinct item_id) = 2
...
Рейтинг: 0 / 0
Помогите с запросом
    #38326156
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fix
qwerty112
Код: sql
1.
2.
3.
4.
5.
6.
SELECT item_id 
FROM prefix_items_filters 
WHERE (filter_id = 6 AND value in (8, 9)) 
   OR (filter_id = 1 AND value = 5))
GROUP BY item_id
HAVING COUNT(distinct filter_id) = 2
...
Рейтинг: 0 / 0
Помогите с запросом
    #38326529
Creologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwerty112fix
qwerty112
Код: sql
1.
2.
3.
4.
5.
6.
SELECT item_id 
FROM prefix_items_filters 
WHERE (filter_id = 6 AND value in (8, 9)) 
   OR (filter_id = 1 AND value = 5))
GROUP BY item_id
HAVING COUNT(distinct filter_id) = 2



Благодарю, попробую так.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]