如何从存储在一列中的json中获取前5个值?

问题描述 投票:0回答:3

我有表名log_requests,我将json数组存储到request列中,如下所示

{"game_id":"1","score":"820",}

game_ids是1到20,现在我想知道多次使用哪个game_id。为了获得一个game_id的计数,我正在使用下面的查询,它运行正常

SELECT * FROM log_requests WHERE json_contains(request, '{"game_id" : "1"}')

但是如何从此表中获得前5个game_id?

mysql sql
3个回答
3
投票

“我用脚开枪,如何制造拐杖?”

不要在JSON字段中存储关系数据。

句号。

创建一个明智的表结构,将游戏存储在单独的表中,使用简单的常规SQL获取数据,您永远不会遇到这样的问题

select game_id, count(1) cnt from games group by game_id order by cnt desc limit 5

0
投票

正如您的常识所说,它不是最佳方法,但是您可以通过制作一个临时表来解决此问题。

类似这样的东西:

CREATE TEMPORARY TABLE 
  temp_log_requests
SELECT 
  JSON_EXTRACT(request, '$.game_id') AS game_id,
  ... -- Include the columns you want to use from log_requests here
FROM 
  log_requests 
LIMIT 0;

然后您可以在同一会话中像查询其他任何表一样查询临时表。

参见:https://dev.mysql.com/doc/refman/8.0/en/create-temporary-table.html


-1
投票

我也有查询方面的经验,并认为每次获得1到20个game_id都很容易。像这个查询:对于(int i = 0; i <20; i ++)从log_requests中选择COUNT(*),其中json_contains(request,'{“ game_id”:“ i”}')并使用您的编程语言的功能对变量进行排序。

Query:“ SELECT *”将在运行查询中花费大量执行时间,因此您应该使用“ SELECT COUNT(*)”

© www.soinside.com 2019 - 2024. All rights reserved.