У меня есть таблица со следующей структурой данных:
name | age | date | value
---------------------------------
John | 20 | 2020-01-01 | 5
Peter| 21 | 2020-01-02 | 6.5
John | 26 | 2019-02-26 | 1.8
John | 20 | 2029-10-13 | 0.7
Peter| 47 | 2020-01-18 | 11.3
Peter| 21 | 2020-02-01 | 41.7
John | 20 | 2020-01-22 | 4
Я хочу, чтобы только Mysql 5.5.5 Stored Proc (без агрегатных функций json) получил такой результат:
{
"John (20)" : {
["2020-01-01", 5],
["2029-10-13", 0.7],
["2029-10-13", 4]
},
"John (26)" : {
["2019-02-26", 1.8]
},
"Peter (21)" : {
["2020-01-02", 6.5],
["2020-02-01", 41.7],
},
"Peter (47)" : {
["2020-01-18", 11.3]
}
}
И не могу понять, как это сделать. Только получаю плоский json….
select concat('[', group_concat(
'{"name":"',`name`,'",',
'"age":"',`age`,'",',
'"date":"',`date`,'",',
'"value":',`value`, '}' separator ','), ']') from `data`
Один вариант:
См. dbfiddle.
Может быть, я нашел что-то странное. Независимо от того, добавляю ли я порядок по возрастанию
date
, я получаю случайно упорядоченный результат. Но мне нужно заказать по дате возрастания. — person iMarh; 12.02.2020Нашли решение — порядок по
date
asc должен быть внутри group_concat() перед разделителем — stackoverflow.com/questions/8631210/ — person iMarh; 12.02.2020А теперь интересно, как сохранить порядок
der
.name_age
таким же образом, как они хранятся в таблице, то есть — Джон (20), Петр (21), Джон (26), Петр (47)…? — person iMarh; 12.02.2020Привет еще раз. Итак, теперь мне интересно, как получить каждую N-ю (скажем, каждую 5-ю) строку в JSON, где находится часть date:value group_concat()? — person iMarh; 12.04.2020