powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка строк с обязательным присутствием различных комбинаций параметров
7 сообщений из 7, страница 1 из 1
Выборка строк с обязательным присутствием различных комбинаций параметров
    #39878137
Есть таблица
CREATE TABLE `test` (
`p1` int(11) NOT NULL,
`p2` int(11) NOT NULL,
`p3` varchar(10) NOT NULL
) ;
с данными
INSERT INTO `test` (`p1`, `p2`, `p3`) VALUES
(1, 2, 'A'),
(3, 4, 'A'),
(1, 2, 'B'),
(5, 6, 'C');
Выбирается только строки где обязательно имеются параметры
p1=1, p2=2 AND p1=3, p2=4
И обязательно параметр p3 ДОЛЖЕН БЫТЬ ОДИНАКОВЫМ В ЭТИХ строках т.е. в данной таблице будут выбраны только строки 1 и 2
если к примеру необходимо выбрать
p1=3, p2=4 AND p1=5, p2=6 то ни одна строка не должна быть выбрана из таблицы
На данный момент задача решается запросом
SELECT t1.p3 FROM table AS t1
LEFT JOIN table AS t2 on t1.p3=t2.p3
WHERE (t1.p1=1 AND t1.p2=2 AND t2.p1=3 AND t2.p2=4)
GROUP BY t1.p3
GROUP BY добавлен потому что на данном этапе интересует выборка параметра p3
Но данный подход ведет к очень сложным конструкциям при увеличении количества комбинаций выбираемых параметров. Так как сколько комбинаций - столько же LEFT JOIN приходится делать таблицу саму на себя. К тому же прилично нагружает базу при выборке двух комбинаций параметров запрос длится 1.5 сек задача стоит увеличить количество комбинаций до трёх ,а в перспективе неограниченно. Уверен должно быть более простое решение которое бы позволяло легко добавлять комбинации параметров
...
Рейтинг: 0 / 0
Выборка строк с обязательным присутствием различных комбинаций параметров
    #39878207
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во проблема...
Код: sql
1.
2.
3.
4.
5.
SELECT p3
FROM table
WHERE (p1, p2) IN ((1,2), (3,4))
GROUP BY p3
HAVING COUNT(*) = 2


fiddle
...
Рейтинг: 0 / 0
Выборка строк с обязательным присутствием различных комбинаций параметров
    #39878588
данный запрос не подходит так как производит выборку из таблыцы
INSERT INTO `test` (`p1`, `p2`, `p3`) VALUES
(1, 2, 'A'),
(1, 2, 'A'),
(1, 2, 'B'),
(5, 6, 'C');
А не должен, так как по заданию требуется что бы в строке с параметром p3 присутствовли ОБЯЗАТЕЛЬНО ОБЕ КОМБИНАЦИИ параметров p1 и p2
...
Рейтинг: 0 / 0
Выборка строк с обязательным присутствием различных комбинаций параметров
    #39878639
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОЧЕНЬ ВНИМАТЕЛЬНО смотри на структуру таблицы в fiddle.

Но если У ТЕБЯ структура таки кривая - замени звезду в COUNT на DISTINCT комбинации полей
...
Рейтинг: 0 / 0
Выборка строк с обязательным присутствием различных комбинаций параметров
    #39878645
Akina, Спасибо, вроде работает. Если я правильно понял в конце запроса необходимо было указать
Код: sql
1.
2.
HAVING COUNT(DISTINCT p1,p2) = 2
 


Непонятно только в чем заключается кривость базы?
...
Рейтинг: 0 / 0
Выборка строк с обязательным присутствием различных комбинаций параметров
    #39879062
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр1990в чем заключается кривость базы?Показанная структура не содержит идентифицирующей информации (синтетический первичный ключ, автозаполняемый штамп времени достаточно точности и пр.). Допускаю, что это итог упрощения структуры для форума (обычное, кстати дело - сосредоточившись на задаче, убрать лишнего), но именно в таком виде допуск полных дубликатов не имеет смысла. А если полные дубликаты запрещены, то запрос со звездой работает.
...
Рейтинг: 0 / 0
Выборка строк с обязательным присутствием различных комбинаций параметров
    #39884532
Akina, Да, это упрощённый вариант, если немного двинуться в сторону реальной
таблицы то будет выглядеть так.
Код: sql
1.
2.
3.
4.
5.
6.
INSERT INTO `test` (`p1`, `p2`, `p3`, `p4`) VALUES
(1, 2, 'A', 7),
(1, 2, 'A', 8),
(1, 2, 'B', 9),
(1, 2, 'B', 10),
(5, 6, 'C', 11);


Просто в какойто момент интересует комбинация параметров p1 и p2
а в другой к примеру, p1 и p4
Тут правда другой момент немогу сообразить (прошу не пинать меня сильно)
Выбрать любые три строки из представленной таблицы в которых обязательно присутствует параметр p3=A и p3=B
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка строк с обязательным присутствием различных комбинаций параметров
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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