Mysql 如何按JSON值排序?

Mysql 如何按JSON值排序?,mysql,sql,json,sql-order-by,Mysql,Sql,Json,Sql Order By,我有一个名为“data”的专栏,里面有一些JSON 我要做的是按“toptimes”值对SQL查询排序 我的实际和期望查询: "SELECT core_members.pp_thumb_photo,name,member_group_id,data FROM game_accounts.accounts INNER JOIN website_accounts.core_members ON member_id = account_id WHERE member_group_id IN (4, 7

我有一个名为“data”的专栏,里面有一些JSON

我要做的是按“toptimes”值对SQL查询排序

我的实际和期望查询:

"SELECT core_members.pp_thumb_photo,name,member_group_id,data FROM game_accounts.accounts INNER JOIN website_accounts.core_members ON member_id = account_id WHERE member_group_id IN (4, 7, 8, 6) ORDER BY data ->> '$[0].toptimes' ASC LIMIT 100"
我的JSON代码:

[ { "daily_login": { "yearday": 56, "hour": 11, "second": 33, "minute": 18, "weekday": 3, "month": 1, "monthday": 26, "timestamp": 1582715913, "year": 120, "isdst": 0 }, "toptimes": 49, "daily_login_streak": 1, "hunters": 59, "playtime": 226099647, "awards": [ ], "nickname": "RandomNick" } ]
大概你想要:

order by data ->> '$[0].toptimes'
这将根据JSON数组第一个元素中toptimes的值对结果集进行排序

如果您存储的是JSON对象而不是数组(尽管这不是您在示例数据中显示的内容),那么:


必须是这样的:

ORDER BY JSON_VALUE(data,'$.daily_login.toptimes)

通过JSON对象中的
每日登录访问
toptimes

我遇到了一个问题,仅针对MS SQL。它有助于将字符串转换为数字

SELECT TOP (1000) [Uuid],
  JSON_VALUE(json, '$.likesCount') as likesCount,
FROM [dbo].[Playlists]
order by CONVERT(bigint, JSON_VALUE(json, '$.likesCount')) desc 

请用您正在使用的数据库标记您的问题。JSON函数是高度特定于供应商的。@Bashar JSON周围有方括号,使其成为一个对象数组。大概你把它做成了一个数组,这样你就可以有多个对象。这是你的数据,你不明白它的结构吗?你应该向游戏开发者了解如何使用这些数据。他们把它放在一个数组里是有原因的,你需要理解原因。我从来没有说过。我说你需要理解你应该做什么,如果你想让我们帮助你,你需要清楚地解释。对不起,我只给你展示了我的json代码的一部分,我编辑了这篇文章来展示整个代码,你的代码不管用,只是把
。kills
改成
。toptimes
@Bashar:我相应地更新了我的答案(另请参阅巴尔马的评论)。@Bashar:define不起作用。您是否收到错误?错误的结果(它们是如何错误的)?它在我的表格中没有显示任何内容,没有错误,顺便说一句,找不到它不起作用的原因我真的是一个初学者,我尝试了你的代码,但它不起作用,我更新了我的JSON代码顺便问一句,有没有办法看看为什么它不起作用?当我尝试你的代码时,我的表格中没有显示行仍然不起作用..我的表格显示了一切但是,一旦我添加了您的代码进行排序,循环表就不会显示任何结果。请解释一下您的代码是做什么的,以及它是如何做的。
SELECT TOP (1000) [Uuid],
  JSON_VALUE(json, '$.likesCount') as likesCount,
FROM [dbo].[Playlists]
order by CONVERT(bigint, JSON_VALUE(json, '$.likesCount')) desc