Как сделать заказ, json_object в mysql - PullRequest
0 голосов
/ 07 марта 2020

У меня проблема с сортировкой JSON_OBJECT:

enter image description here

Как мне отсортировать объекты, как они есть в JSON ОБЪЕКТЕ?

1 Ответ

2 голосов
/ 07 марта 2020

Вы не можете контролировать порядок элементов в массиве, который генерирует json_arrayagg(), даже в MySQL 8.0, как объяснено в документации :

Агрегирует результирующий набор как один массив JSON, элементы которого состоят из строк. Порядок элементов в этом массиве не определен.

Уродливое и не масштабируемое решение заключается в использовании group_concat() для генерации массива json вручную:

select 
    dashboard,
    widget,
    ...
    concat(
        '[',
        group_concat(
            json_object('color_mode', color_mode, ...)
            order by <your_ordering_clumn>
        ),
        ']'
    ) js_array
from datadog_wigets_markers 
group by dashboard, widget, ...

Это не удастся для длинных json строк. Я предпочел бы попытаться использовать json_arrayagg() и неупорядоченные массивы.

Примечание: вы должны перечислить все неагрегированные столбцы в предложении group by; это требование в большинстве баз данных и хорошая практика кодирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...