Как разбить строку с квадратными скобками и запятыми на столбцы и строки в MySQL - PullRequest
0 голосов
/ 05 апреля 2019

Я хочу разбить строки как: [[6, 10, 11, 16], [0.4444444444444445, 53.0, 7.555555555555555, 5.111111111111111]]

для вывода

id       value
---------------------------
6        0.4444444444444445
10       53.0
11       7.555555555555555
16       5.111111111111111

Количество «идентификаторов» в строке варьируется, но всегда существует значение для «идентификатора».

1 Ответ

0 голосов
/ 05 апреля 2019

Это возможно при использовании хранимой процедуры, которая разбивает строку, создает (временную) таблицу, сохраняет результат в указанной таблице и возвращает содержимое таблицы, используя оператор SELECT.

Однако маловероятно, что это эффективный подход - для записи потребуется много времени, а время выполнения не будет хорошим, создавая узкое место, если вы передадите ему много данныхили если вызывается повторно.

Более простой подход - и маршрут, по которому я буду следовать, - это сделать это на вашем любимом языке программирования и затем сохранить результат в базе данных.В качестве альтернативы вывод вашего кода может быть запросом с UNION, который вернет желаемую структуру данных.По сути, задача состоит в том, чтобы транспонировать двумерный массив и структурировать вывод.Если он не слишком велик, он будет быстрым и эффективным и может использоваться в качестве подзапроса, если вам нужно объединить его с другими данными.

Чтобы дать вам и идею, результат может быть следующим:

SELECT 6 AS id, 0.4444444444444445 AS value
UNION ALL SELECT 10, 53.0
UNION ALL SELECT 11,7.555555555555555
UNION ALL SELECT 16, 5.111111111111111

На практике:

SELECT 
   sub.id,
   sub.value,
   info.someFieldFromAnotherTable
FROM
   (SELECT 6 AS id, 0.4444444444444445 AS value
    UNION ALL SELECT 10, 53.0
    UNION ALL SELECT 11,7.555555555555555
    UNION ALL SELECT 16, 5.111111111111111
   ) AS sub
   INNER JOIN otherInfoTable info ON info.id = sub.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...