Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Выборка записей по пересечению значений поля и строкой кностанты
|
|||
|---|---|---|---|
|
#18+
Добрый день. Есть таблица `agents`, в которой есть строковое поле, к примеру `business`. В этом поле хранятся целые натуральные числа, разделенные запятой - "10,15,25,7,1". Числа в этом поле не повторяются. Сортировки чисел в этом поле нет, но, при необходимости, можно сделать. Задана строковая константа Str, которая по значению похожа с вышеописанным полем - т.е., в ней записаны целые натуральные числа, разделенные запятой. Числа не повторяются и сортировки нет (но можно сделать). Необходимо выбрать все записи из `agents`, в которых поле `business` содержит хотя бы одно число, входящее в Str. Есть ли возможность сделать выборку одним запросом? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2017, 16:07 |
|
||
|
Выборка записей по пересечению значений поля и строкой кностанты
|
|||
|---|---|---|---|
|
#18+
OlegROA, ...вообщето ето не камильфо для СКЛ-а, лучше нормализовать, но если желаете, то да, это можно сделать: конкретно 8434456 и еще есть ФАК с похожими задачами: http://www.sql.ru/forum/1129063/faq-obrabotka-strok-i-parsing-tekstov-sredstvami-mysql ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2017, 16:17 |
|
||
|
Выборка записей по пересечению значений поля и строкой кностанты
|
|||
|---|---|---|---|
|
#18+
OlegROAпри необходимости, можно сделатьНа самом деле есть необходимость нормализовать данные поля agents.business - скажем, вместо него добавить таблицу business с полями agent_id и business. В первом хранить идентификатор агента, а во втором значения business для него по одному на запись (т.е. одному агенту будет соответствовать несколько записей в этой таблице). Тогда запрос станет совершенно элементарным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2017, 16:55 |
|
||
|
Выборка записей по пересечению значений поля и строкой кностанты
|
|||
|---|---|---|---|
|
#18+
Странные люди - вопрос задан конкретный, а вместо ответов - советы из Кнута! Что касается ответа "javajdbc" - увы, там рассмотрен совсем простой случай - поиск одного числа в списке чисел. У меня же - поиск набора чисел в другом наборе. Из того обсуждения можно лишь позаимствовать способ создание набора натуральных чисел 1,2,3,... и с их помощью производить перебор одного из списков, что бы потом уже искать выбранное число в другом списке. Но, опять же, этот способ ограничен по количеству чисел в списке и, имхо, не красивый. В общем, задача сводится к вопросу - быстрый поиск пересечения двух списков в виде строковых полей. Даже еще проще - факт пересечения этих списков, без создания выборки одинаковых значений из этих списков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2017, 17:55 |
|
||
|
Выборка записей по пересечению значений поля и строкой кностанты
|
|||
|---|---|---|---|
|
#18+
OlegROAбыстрый поиск пересечения двух списков в виде строковых полей Ах вам ещё и быстрый? Без вариантов. Любые ухищрения - гарантированный seqscan. Приведите схему в нормальный вид. Тогда пересечение ищется быстро и хорошо. Для приложений, которые рефакторить слишком дорого - повесьте сбоку пару триггеров. Итератор по строке с выделением чисел написать в mysql всё-таки можно. Или переезжайте на postgresql. Сменить тип данных на массив, да добавить gin индекс. Или если грубо ограничивает тупое приложение - можно даже строку оставить, а индекс построить по string_to_array ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2017, 18:06 |
|
||
|
Выборка записей по пересечению значений поля и строкой кностанты
|
|||
|---|---|---|---|
|
#18+
Я думал, что уже ответил по поводу отсылок к Кнуту? Еще раз - изменение структуры БД невозможно! В общем, обошелся хранимкой, которая определяет пересечение двух списков - на целевых таблицах (размер которых увеличиваться уже не будет) работает шустро. Всем спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2017, 19:52 |
|
||
|
Выборка записей по пересечению значений поля и строкой кностанты
|
|||
|---|---|---|---|
|
#18+
OlegROAЯ думал, что уже ответил по поводу отсылок к Кнуту? ...вас будут отсылать на него всегда и везде если вы хотите что-то сделать в СКЛ-е...но не понимаете что ваша задача не "нативная" для СКЛ-а... это не страно, ето нормально... все притензии к Кнуту, а не к нам.... OlegROAЕще раз - изменение структуры БД невозможно! ...вы говорите это первый раз... предыдуший раз вы придумали... OlegROAВ общем, обошелся хранимкой, которая определяет пересечение двух списков ...подход, который я вам дал -- сделает тоже самое что и хранимка... возмоно даже быстрее... и хранимка и перебор на переменных -- одинаково "не Кнутовские"... просто ето два разных расширений СКЛ-а... OlegROAЧто касается ответа "javajdbc" - увы, там рассмотрен совсем простой случай ...тотже итератор...тотже курсор... ето -- решение на поставленый вопрос... ...так что ваше "увы" неуместно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2017, 16:42 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39557748&tid=1830237]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 365ms |

| 0 / 0 |
