powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Динамическая обработка json строки
8 сообщений из 8, страница 1 из 1
Динамическая обработка json строки
    #39865489
hysgvarna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CREATE DEFINER=`ххх`@`ххх` PROCEDURE `Name_Template`(id_product char(11), ArrayParametr json)
BEGIN #собирает параметры продукта в одной строке

#строка json для проверки [{"param": "WLL"}, {"param": "L"}, {"param": "A"}]

declare l INT unsigned;
declare i INT unsigned; # только положительные значения
declare val char(11);
declare val1 char(50);

SET l = JSON_LENGTH(ArrayParametr); #узнаем длиину массива начиная с единицы
SET i = 0;

WHILE i < l DO
SET val = TRIM(BOTH '"' FROM JSON_EXTRACT(ArrayParametr, CONCAT('$[', i, '].param')));
SET @t2 = CONCAT("SELECT ", val, " FROM Price where Price.ProductId=", id_product);
SET i := i + 1; #приращение счетчика
END WHILE;

PREPARE stmt3 FROM @t2;
EXECUTE stmt3;
DEALLOCATE PREPARE stmt3;

END


В данном случае выводится только последний параметр json строки. Подскажите как вывести все параметры в одной строке типа char, учитывая, что длинна массива json строки - динамическая.
...
Рейтинг: 0 / 0
Динамическая обработка json строки
    #39865513
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
SELECT GROUP_CONCAT(param) params
FROM JSON_TABLE( '[{"param": "WLL"}, {"dummy": "L"}, {"param": "L"}, {"param": "A"}]',
                 "$[*]" COLUMNS( param VARCHAR(254) PATH "$.param" )
               ) AS jsontable;
...
Рейтинг: 0 / 0
Динамическая обработка json строки
    #39865582
hysgvarna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

Странно, почему-то ошибку синтаксиса выдает

SELECT GROUP_CONCAT(param) params
FROM JSON_TABLE( '[{"param": "WLL"}, {"dummy": "L"}, {"param": "L"}, {"param": "A"}]',
"$[*]" COLUMNS( param VARCHAR(254) PATH "$.param" )
) AS jsontable;


Все что после from, не могу понять почему.
...
Рейтинг: 0 / 0
Динамическая обработка json строки
    #39865600
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нормально всё с синтаксисом.
fiddle

hysgvarnaошибку синтаксиса выдает
Где цитата ошибки? или её нужно придумать самостоятельно?

hysgvarnaВсе что после from, не могу понять почему.
На всякий случай - версия сервера какая?
...
Рейтинг: 0 / 0
Динамическая обработка json строки
    #39865607
hysgvarna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

Ну я тупо даже скомпилировать не могу в Workbench.
Версия 5.7.27-0ubuntu0.16.04.1
...
Рейтинг: 0 / 0
Динамическая обработка json строки
    #39865609
hysgvarna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hysgvarna,

Есть какая-нибудь альтернатива для моей версии?
...
Рейтинг: 0 / 0
Динамическая обработка json строки
    #39865709
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я верно понимаю задачу, то

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
DROP PROCEDURE IF EXISTS Name_Template;

DELIMITER @;

CREATE PROCEDURE `Name_Template`(id_product char(11), ArrayParametr json)
BEGIN -- собирает параметры продукта в одной строке

-- строка json для проверки [{"param": "WLL"}, {"param": "L"}, {"param": "A"}]

declare l INT unsigned;
declare i INT unsigned; -- только положительные значения
declare val char(11);
declare val1 char(50);

SET l = JSON_LENGTH(ArrayParametr); -- узнаем длиину массива начиная с единицы
SET i = 0;
SET @t2='';

WHILE i < l DO
    SET val = TRIM(BOTH '"' FROM JSON_EXTRACT(ArrayParametr, CONCAT('$[', i, '].param')));
    -- SET @t2 = CONCAT("SELECT ", val, " FROM Price where Price.ProductId=", id_product);
    SET @t2:=CONCAT(@t2,',',val);
    SET i := i + 1; -- приращение счетчика
END WHILE;

SET @t2:=CONCAT("SELECT ", TRIM(LEADING "," FROM @t2), " FROM Price where Price.ProductId=", id_product);

-- PREPARE stmt3 FROM @t2;
-- EXECUTE stmt3;
-- DEALLOCATE PREPARE stmt3;
SELECT @t2;

END;
@;
DELIMITER ;

CALL Name_Template(123456, '[{"param": "WLL"}, {"param": "L"}, {"param": "A"}]');

-- DROP PROCEDURE IF EXISTS Name_Template;
...
Рейтинг: 0 / 0
Динамическая обработка json строки
    #39866108
hysgvarna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

Цель задачи была в формирования имени по шаблону(у разных групп товаров будет разный шаблон для вывода параметров)


CREATE DEFINER=`xxx`@`xxx` PROCEDURE `Name_Template`(id_product char(11), ArrayParametr json)
BEGIN -- собирает параметры продукта в одной строке

-- строка json для проверки [{"param": "WLL"}, {"param": " "}, {"param": "L"}, {"param": "-"}, {"param": "A"}]

declare l INT unsigned;
declare i INT unsigned; -- только положительные значения
declare val char(11);
declare val1 char(50);

SET l = JSON_LENGTH(ArrayParametr); -- узнаем длину массива начиная с единицы
SET i = 0;
SET @t2='';

WHILE i < l DO

if mod(i, 2) = 0 #добавляем выбранные символы между значениями (в них не убираем кавычки)
THEN
SET val = TRIM(BOTH '"' FROM JSON_EXTRACT(ArrayParametr, CONCAT('$[', i, '].param')));
ELSE
SET val = JSON_EXTRACT(ArrayParametr, CONCAT('$[', i, '].param'));
END if;

SET @t2 := CONCAT(@t2, ',', val);
SET i := i + 1; -- приращение счетчика
END WHILE;

SET @t2 := CONCAT("SELECT ", "concat(", TRIM(LEADING "," FROM @t2), ")", " FROM Price where Price.ProductId=", id_product); #собираем строку и удаляем первую запятую

PREPARE stmt3 FROM @t2; #выполняем собранную строку
EXECUTE stmt3;
DEALLOCATE PREPARE stmt3;
-- SELECT @t2;

END


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


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