|
Динамическая обработка json строки
|
|||
---|---|---|---|
#18+
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 строки - динамическая. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 11:15 |
|
Динамическая обработка json строки
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 12:01 |
|
Динамическая обработка json строки
|
|||
---|---|---|---|
#18+
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, не могу понять почему. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 13:11 |
|
Динамическая обработка json строки
|
|||
---|---|---|---|
#18+
Нормально всё с синтаксисом. fiddle hysgvarnaошибку синтаксиса выдает Где цитата ошибки? или её нужно придумать самостоятельно? hysgvarnaВсе что после from, не могу понять почему. На всякий случай - версия сервера какая? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 13:25 |
|
Динамическая обработка json строки
|
|||
---|---|---|---|
#18+
Akina, Ну я тупо даже скомпилировать не могу в Workbench. Версия 5.7.27-0ubuntu0.16.04.1 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 13:30 |
|
Динамическая обработка json строки
|
|||
---|---|---|---|
#18+
hysgvarna, Есть какая-нибудь альтернатива для моей версии? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 13:33 |
|
Динамическая обработка json строки
|
|||
---|---|---|---|
#18+
Если я верно понимаю задачу, то Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 15:05 |
|
Динамическая обработка json строки
|
|||
---|---|---|---|
#18+
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 Промежуточное решение моей задачи (еще не добавлена обрезка ненужных нулей, и возможно еще что-то) Спасибо вам большое, задали правильный вектор решения задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 10:28 |
|
|
start [/forum/topic.php?fid=47&fpage=31&tid=1828956]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
2ms |
others: | 10ms |
total: | 141ms |
0 / 0 |