|
Выборка строк с обязательным присутствием различных комбинаций параметров
|
|||
---|---|---|---|
#18+
Есть таблица 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 сек задача стоит увеличить количество комбинаций до трёх ,а в перспективе неограниченно. Уверен должно быть более простое решение которое бы позволяло легко добавлять комбинации параметров ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2019, 11:33 |
|
Выборка строк с обязательным присутствием различных комбинаций параметров
|
|||
---|---|---|---|
#18+
Во проблема... Код: sql 1. 2. 3. 4. 5.
fiddle ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2019, 12:53 |
|
Выборка строк с обязательным присутствием различных комбинаций параметров
|
|||
---|---|---|---|
#18+
данный запрос не подходит так как производит выборку из таблыцы INSERT INTO `test` (`p1`, `p2`, `p3`) VALUES (1, 2, 'A'), (1, 2, 'A'), (1, 2, 'B'), (5, 6, 'C'); А не должен, так как по заданию требуется что бы в строке с параметром p3 присутствовли ОБЯЗАТЕЛЬНО ОБЕ КОМБИНАЦИИ параметров p1 и p2 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2019, 09:28 |
|
Выборка строк с обязательным присутствием различных комбинаций параметров
|
|||
---|---|---|---|
#18+
ОЧЕНЬ ВНИМАТЕЛЬНО смотри на структуру таблицы в fiddle. Но если У ТЕБЯ структура таки кривая - замени звезду в COUNT на DISTINCT комбинации полей ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2019, 15:18 |
|
Выборка строк с обязательным присутствием различных комбинаций параметров
|
|||
---|---|---|---|
#18+
Akina, Спасибо, вроде работает. Если я правильно понял в конце запроса необходимо было указать Код: sql 1. 2.
Непонятно только в чем заключается кривость базы? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2019, 16:18 |
|
Выборка строк с обязательным присутствием различных комбинаций параметров
|
|||
---|---|---|---|
#18+
Александр1990в чем заключается кривость базы?Показанная структура не содержит идентифицирующей информации (синтетический первичный ключ, автозаполняемый штамп времени достаточно точности и пр.). Допускаю, что это итог упрощения структуры для форума (обычное, кстати дело - сосредоточившись на задаче, убрать лишнего), но именно в таком виде допуск полных дубликатов не имеет смысла. А если полные дубликаты запрещены, то запрос со звездой работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2019, 08:47 |
|
Выборка строк с обязательным присутствием различных комбинаций параметров
|
|||
---|---|---|---|
#18+
Akina, Да, это упрощённый вариант, если немного двинуться в сторону реальной таблицы то будет выглядеть так. Код: sql 1. 2. 3. 4. 5. 6.
Просто в какойто момент интересует комбинация параметров p1 и p2 а в другой к примеру, p1 и p4 Тут правда другой момент немогу сообразить (прошу не пинать меня сильно) Выбрать любые три строки из представленной таблицы в которых обязательно присутствует параметр p3=A и p3=B ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2019, 22:57 |
|
|
start [/forum/topic.php?fid=47&msg=39879062&tid=1828879]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 145ms |
0 / 0 |