Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка записей по пересечению значений поля и строкой кностанты / 8 сообщений из 8, страница 1 из 1
22.11.2017, 16:07
    #39557631
OlegROA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей по пересечению значений поля и строкой кностанты
Добрый день.

Есть таблица `agents`, в которой есть строковое поле, к примеру `business`.
В этом поле хранятся целые натуральные числа, разделенные запятой - "10,15,25,7,1".
Числа в этом поле не повторяются.
Сортировки чисел в этом поле нет, но, при необходимости, можно сделать.

Задана строковая константа Str, которая по значению похожа с вышеописанным полем - т.е., в ней записаны целые натуральные числа, разделенные запятой. Числа не повторяются и сортировки нет (но можно сделать).
Необходимо выбрать все записи из `agents`, в которых поле `business` содержит хотя бы одно число, входящее в Str.

Есть ли возможность сделать выборку одним запросом?

Спасибо!
...
Рейтинг: 0 / 0
22.11.2017, 16:17
    #39557643
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей по пересечению значений поля и строкой кностанты
OlegROA,

...вообщето ето не камильфо для СКЛ-а, лучше
нормализовать, но если желаете, то да, это
можно сделать:

конкретно 8434456 и еще есть ФАК с похожими задачами:
http://www.sql.ru/forum/1129063/faq-obrabotka-strok-i-parsing-tekstov-sredstvami-mysql
...
Рейтинг: 0 / 0
22.11.2017, 16:55
    #39557696
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей по пересечению значений поля и строкой кностанты
OlegROAпри необходимости, можно сделатьНа самом деле есть необходимость нормализовать данные поля agents.business - скажем, вместо него добавить таблицу business с полями agent_id и business. В первом хранить идентификатор агента, а во втором значения business для него по одному на запись (т.е. одному агенту будет соответствовать несколько записей в этой таблице).
Тогда запрос станет совершенно элементарным.
...
Рейтинг: 0 / 0
22.11.2017, 17:55
    #39557738
OlegROA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей по пересечению значений поля и строкой кностанты
Странные люди - вопрос задан конкретный, а вместо ответов - советы из Кнута!
Что касается ответа "javajdbc" - увы, там рассмотрен совсем простой случай - поиск одного числа в списке чисел.
У меня же - поиск набора чисел в другом наборе.
Из того обсуждения можно лишь позаимствовать способ создание набора натуральных чисел 1,2,3,... и с их помощью производить перебор одного из списков, что бы потом уже искать выбранное число в другом списке.
Но, опять же, этот способ ограничен по количеству чисел в списке и, имхо, не красивый.

В общем, задача сводится к вопросу - быстрый поиск пересечения двух списков в виде строковых полей.
Даже еще проще - факт пересечения этих списков, без создания выборки одинаковых значений из этих списков.
...
Рейтинг: 0 / 0
22.11.2017, 18:06
    #39557748
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей по пересечению значений поля и строкой кностанты
OlegROAбыстрый поиск пересечения двух списков в виде строковых полей
Ах вам ещё и быстрый?
Без вариантов.
Любые ухищрения - гарантированный seqscan.

Приведите схему в нормальный вид. Тогда пересечение ищется быстро и хорошо. Для приложений, которые рефакторить слишком дорого - повесьте сбоку пару триггеров. Итератор по строке с выделением чисел написать в mysql всё-таки можно.
Или переезжайте на postgresql. Сменить тип данных на массив, да добавить gin индекс. Или если грубо ограничивает тупое приложение - можно даже строку оставить, а индекс построить по string_to_array
...
Рейтинг: 0 / 0
22.11.2017, 19:52
    #39557826
OlegROA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей по пересечению значений поля и строкой кностанты
Я думал, что уже ответил по поводу отсылок к Кнуту? Еще раз - изменение структуры БД невозможно!
В общем, обошелся хранимкой, которая определяет пересечение двух списков - на целевых таблицах (размер которых увеличиваться уже не будет) работает шустро.
Всем спасибо!
...
Рейтинг: 0 / 0
23.11.2017, 16:42
    #39558460
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей по пересечению значений поля и строкой кностанты
OlegROAЯ думал, что уже ответил по поводу отсылок к Кнуту?

...вас будут отсылать на него всегда и везде если вы хотите
что-то сделать в СКЛ-е...но не понимаете что ваша задача
не "нативная" для СКЛ-а... это не страно, ето нормально...
все притензии к Кнуту, а не к нам....


OlegROAЕще раз - изменение структуры БД невозможно!

...вы говорите это первый раз... предыдуший раз вы придумали...


OlegROAВ общем, обошелся хранимкой, которая определяет пересечение двух списков

...подход, который я вам дал -- сделает тоже самое что и хранимка...
возмоно даже быстрее... и хранимка и перебор на переменных --
одинаково "не Кнутовские"... просто ето два разных расширений СКЛ-а...

OlegROAЧто касается ответа "javajdbc" - увы, там рассмотрен совсем простой случай

...тотже итератор...тотже курсор... ето -- решение на поставленый вопрос...
...так что ваше "увы" неуместно...
...
Рейтинг: 0 / 0
23.11.2017, 16:45
    #39558462
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей по пересечению значений поля и строкой кностанты
OlegROAВсем спасибо!

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


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