powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос
15 сообщений из 15, страница 1 из 1
Помогите составить запрос
    #39805955
drunken_ikarus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Помогите составить запрос
Таблица:
pidattr_idvalue52 12 t152 13 t252 25 t352 26 t453 12 t1153 13 t1253 25 t1353 26 t454 12 t1154 13 t254 25 t1354 26 t4
задача: выбрать только те pid у которых (attr_id=13 и value=t2) и (attr_id=26 и value=t4), т.е. в выборку должны попасть pid 52 и 54
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39805963
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39805964
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drunken_ikarus,

про реляционное деление читайте...
если коротко и в двух словах, то самая простая и интуитивно понятная реализация - на группировке (GRUOP BY) с постфильтрацией (HAVING)
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39805965
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183,

там не так всё просто, как кажется на первый взгляд...
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39805966
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drunken_ikarusвыбрать только те pid у которых (attr_id=13 и value=t2) и (attr_id=26 и value=t4), т.е. в выборку должны попасть pid 52 и 54

(attr_id=13 и value=t2) ИЛИ (attr_id=26 и value=t4)
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39805967
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина Анна,

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

pidattr_idvalue52 12 t152 13 t252 25 t352 26 t454 12 t1154 13 t254 25 t1354 26 t4

pidattr_idvalue52 13 t252 26 t454 13 t254 26 t4

pid5254
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39805974
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drunken_ikarusвыбрать только те pid у которых (attr_id=13 и value=t2) и (attr_id=26 и value=t4)
Если пар всегда две, то лучше использовать тривиальное решение с 2 копиями таблицы. В первой отбор по первому условию, во втором по второму, и inner join по pid.
Если количество пар динамическое - лучше использовать запрос с отбором по условиям (объединяемым через ИЛИ), группировкой по pid и проверкой количества уникальных attr_id.
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39806055
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гениальная формулировка.
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39806069
drunken_ikarus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
смысл в том что у продукта (pid) есть атрибут и его значение, надо найти продукты (pid) у которых есть все нужные нам атрибуты с одинаковым значение соответственно

т.е. поиске атрибута 13 = t2 и атрибута 26 = t4 мы должны получить товары 52 и 54, но не 53 (потому что у него атрибут 13 имеет значение t12 хоть и атрибут 26 имеет t4)

pid attr_id value52 12 t152 13 t252 25 t352 26 t453 12 t1153 13 t1253 25 t1353 26 t454 12 t1154 13 t254 25 t1354 26 t4

982183, при запросе (attr_id=13 и value=t2) ИЛИ (attr_id=26 и value=t4) мы получим 52,53,54
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39806076
drunken_ikarus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinadrunken_ikarusвыбрать только те pid у которых (attr_id=13 и value=t2) и (attr_id=26 и value=t4)
Если пар всегда две, то лучше использовать тривиальное решение с 2 копиями таблицы. В первой отбор по первому условию, во втором по второму, и inner join по pid.
Если количество пар динамическое - лучше использовать запрос с отбором по условиям (объединяемым через ИЛИ), группировкой по pid и проверкой количества уникальных attr_id.
количество пар динамическое, не очень понял про проверку количества уникальных attr_id
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39806078
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drunken_ikarusпри запросе (attr_id=13 и value=t2) ИЛИ (attr_id=26 и value=t4) мы получим 52,53,54HAVING отбросит 53.
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39806080
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drunken_ikarusне очень понял про проверку количества уникальных attr_id
Код: sql
1.
HAVING COUNT(DISTINCT attr_id) = 2
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39806088
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ибо могут быть повторы по строкам удовлетворяющих условиям.

(Что не ИЛИ понял. Не сразу врубился в коечную задачу)
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39806155
drunken_ikarus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina
Код: sql
1.
HAVING COUNT(DISTINCT attr_id) = 2


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


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