MYSQL JSON 按值排序

MYSQL JSON ordering by values

我正在使用 JSON 类型将一些数据存储在 table 中,我在获取数据时遇到了一些排序问题。

示例数据:

{"574161434674462720":1,"870013663581437952":6,"903739315782320168":3,"913739315950071829":1}

此处的 json 在存储时按其键排序,这很好,但是当我尝试使用 "SELECT json -> '$.*' FROM table" 获取它时,它保持相同的顺序。

输出:('[1, 6, 3, 1]',)

我试过一些时髦的东西,比如:

"SELECT json -> '$.*' FROM table ORDER BY CAST(json -> '$.*' AS UNSIGNED) ASC"

但是输出还是一样

我希望能够得到类似这样的输出:

["870013663581437952":6, "903739315782320168":3, "574161434674462720":1, "913739315950071829":1]

或类似的东西。

如果要对 JSON 数组中的值进行排序,则必须将数组解析为单个元素,然后根据需要的顺序重建它。

SELECT JSON_ARRAYAGG(jsontable.value) OVER (ORDER BY jsontable.value) sorted
FROM test
CROSS JOIN JSON_TABLE(test.jsondata -> '$.*',
                      '$[*]' COLUMNS (value INT PATH '$')) jsontable
ORDER BY sorted DESC LIMIT 1

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=120495fc6f53829d83681d6f3ff574d4