powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Разбиение строки значений на столбец (Или возможность вывода повторов в IN)
13 сообщений из 13, страница 1 из 1
Разбиение строки значений на столбец (Или возможность вывода повторов в IN)
    #39794805
slawdows
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
После обработки полей, содержащих XML данные, получаю следующее:

Values1620 4402116 440 21
Далее преобразовываю так:

Values16;20;440;21;16;440;21

Вопрос:
Можно ли последнюю строку значений, разбитых запятой вывести в столбец, вот так:

Values1620440211644021
Либо продублировать строки в результате запроса, если они есть в операторе IN (16,20,440,21,16,440,21) ?

Код: sql
1.
2.
3.
4.
5.
SELECT id
FROM table
WHERE id IN (16,20,440,21,16,440,21)

Сейчас выбираются уникальные. Может можно наподобие UNION ALL добавить к выборке повторы.



В итоге нужно получить:

Values Count162 шт201 шт4402 шт212 шт
...
Рейтинг: 0 / 0
Разбиение строки значений на столбец (Или возможность вывода повторов в IN)
    #39794915
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slawdowsДалее преобразовываю так:

Values16;20;440;21;16;440;21

Вопрос:
Можно ли последнюю строку значений, разбитых запятой вывести в столбец, вот так:

Values1620440211644021Если версия 8+ - легко.
...
Рейтинг: 0 / 0
Разбиение строки значений на столбец (Или возможность вывода повторов в IN)
    #39794916
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slawdowsВ итоге нужно получить:

Values Count162 шт201 шт4402 шт212 штА вот это - совсем иная задача, для которой вовсе не требуется (хотя и можно) деление на отдельные записи. И опять же - простота реализации зависит от версии.
...
Рейтинг: 0 / 0
Разбиение строки значений на столбец (Или возможность вывода повторов в IN)
    #39794968
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,
покажи для 8,+
...
Рейтинг: 0 / 0
Разбиение строки значений на столбец (Или возможность вывода повторов в IN)
    #39794985
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяпокажи для 8,+

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
WITH RECURSIVE
-- таблица исходных данных
test AS (SELECT '16' val UNION ALL
         SELECT '20 440' UNION ALL
         SELECT '21' UNION ALL
         SELECT '16 440 21'),
-- опорная таблица чисел
cte AS (SELECT 1 num
        UNION ALL
        SELECT num + 1
          FROM cte
          WHERE num < (SELECT 1+MAX(LENGTH(val)-LENGTH(REPLACE(val, ' ', '')))
                       FROM test))
-- основной запрос
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(val, ' ', num), ' ', -1) element, COUNT(*) count
FROM test, cte
WHERE LENGTH(val)-LENGTH(REPLACE(val, ' ', '')) >= num-1
GROUP BY element



fiddle
...
Рейтинг: 0 / 0
Разбиение строки значений на столбец (Или возможность вывода повторов в IN)
    #39795038
slawdows
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaЕсли версия 8+ - легко.
На данный момент 5.7 :(

AkinaА вот это - совсем иная задача, для которой вовсе не требуется (хотя и можно) деление на отдельные записи. И опять же - простота реализации зависит от версии.
На нашей версии можно попытаться?

Akina
Код: sql
1.
2.
3.
4.
5.
6.
-- таблица исходных данных
test AS (SELECT '16' val UNION ALL
         SELECT '20 440' UNION ALL
         SELECT '21' UNION ALL
         SELECT '16 440 21'),
-- опорная таблица чисел



А если количество получаемых строк неизвестно?

@Akina, и вариант с выводом повторов в IN совсем "идиотский"?
...
Рейтинг: 0 / 0
Разбиение строки значений на столбец (Или возможность вывода повторов в IN)
    #39795046
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slawdowsНа нашей версии можно попытаться?Можно. Пиши хранимку... либо генери опорную таблицу чисел динамически. А остальное не изменится. Только нужно как-то изначально знать максимально возможное количество элементов в одной записи.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(val, ' ', num), ' ', -1) element, COUNT(*) count
FROM test, ( SELECT 1 num UNION ALL
             SELECT 2 UNION ALL
             SELECT 3 UNION ALL
             -- ...
             SELECT 8 UNION ALL
             SELECT 9 UNION ALL
             SELECT 10 ) cte -- допустим, не более 10 элементов на запись
WHERE LENGTH(val)-LENGTH(REPLACE(val, ' ', '')) >= num-1
GROUP BY element



fiddle

slawdowsА если количество получаемых строк неизвестно?А какая разница?
...
Рейтинг: 0 / 0
Разбиение строки значений на столбец (Или возможность вывода повторов в IN)
    #39795052
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, забыл заменить комментарий на код.
fiddle
...
Рейтинг: 0 / 0
Разбиение строки значений на столбец (Или возможность вывода повторов в IN)
    #39795086
slawdows
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaТолько нужно как-то изначально знать максимально возможное количество элементов в одной записи.
Ну да, есть предел, за который они не будут выходить. 10 наверное и есть. Кажется при обработке XML можно подсчитать количество элементов? Это поможет?

AkinaА какая разница?
Ну просто у Вас в первом примере количество SELECT -ов по количеству строк.
...
Рейтинг: 0 / 0
Разбиение строки значений на столбец (Или возможность вывода повторов в IN)
    #39795165
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slawdowsпросто у Вас в первом примере количество SELECT -ов по количеству строк.Ну лень мне было тратить два запроса на создание да наполнение таблицы. А так что CTE, что статическая таблица - результат-то от этого не зависит.
...
Рейтинг: 0 / 0
Разбиение строки значений на столбец (Или возможность вывода повторов в IN)
    #39795171
slawdows
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinaрезультат-то
Спасибо большое за совет и главное за код, буду разбираться!

Последний вопрос: будет ли более правильным делать такие операции по обработке на стороне какого либо клиента или логике MySQL это никак не претит?
...
Рейтинг: 0 / 0
Разбиение строки значений на столбец (Или возможность вывода повторов в IN)
    #39795174
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любую работу должен выполнять тот, кто для этой работы наилучшим образом приспособлен. Обработку (описанного выше типа) данных из базы лучше вести на сервере баз данных.
...
Рейтинг: 0 / 0
Разбиение строки значений на столбец (Или возможность вывода повторов в IN)
    #39816667
slawdows
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Вы Гений! Теперь действительно большое спасибо, так как удалось вернуться к задаче и успешно реализовать!

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


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