遍历 json 数组 mysql 8
Iterate through a json array mysql 8
我有以下 table 架构和 JSON 字段,
CREATE TABLE `test` (
`stats` json NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
我插入了以下内容,
INSERT INTO test VALUES('[{"days": 15, "percentage": 50},{"days": 5, "percentage": 100}]');
我现在想做的是迭代这个和 return 给定日期的百分比,或者只是分别显示每个密钥对值。我该怎么做?
我从 here 中找到了以下查询,我试图让它为我的目的工作,但输出并不像预期的那样。理想情况下,我想在不使用存储过程或其他任何东西的情况下在这样的查询中执行此操作,
select stats, i, concat('stats', element) from `test`, json_table(stats, '$[*]' columns (i for ordinality, element varchar(100) path '$')) jt;
如果日期是 15,那么输出将是 50。
day percentage
15 50
或在特定日期不过滤的情况下迭代时的以下结果
day percentage
15 50
5 100
这是我尝试的fiddle
密钥在我的情况下是唯一的。
SELECT stats, i, days, percentage
FROM test,
JSON_TABLE(stats,
'$[*]' COLUMNS (i FOR ORDINALITY,
days VARCHAR(100) PATH '$.days',
percentage VARCHAR(100) PATH '$.percentage')) jt;
我有以下 table 架构和 JSON 字段,
CREATE TABLE `test` (
`stats` json NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
我插入了以下内容,
INSERT INTO test VALUES('[{"days": 15, "percentage": 50},{"days": 5, "percentage": 100}]');
我现在想做的是迭代这个和 return 给定日期的百分比,或者只是分别显示每个密钥对值。我该怎么做?
我从 here 中找到了以下查询,我试图让它为我的目的工作,但输出并不像预期的那样。理想情况下,我想在不使用存储过程或其他任何东西的情况下在这样的查询中执行此操作,
select stats, i, concat('stats', element) from `test`, json_table(stats, '$[*]' columns (i for ordinality, element varchar(100) path '$')) jt;
如果日期是 15,那么输出将是 50。
day percentage
15 50
或在特定日期不过滤的情况下迭代时的以下结果
day percentage
15 50
5 100
这是我尝试的fiddle
密钥在我的情况下是唯一的。
SELECT stats, i, days, percentage
FROM test,
JSON_TABLE(stats,
'$[*]' COLUMNS (i FOR ORDINALITY,
days VARCHAR(100) PATH '$.days',
percentage VARCHAR(100) PATH '$.percentage')) jt;