如何解决MySQL 中的 JSON:从键范围内的对象获取数据 我有什么:我想要的:我在互联网上搜索的内容:
我有什么:
- 一张
MysqL
的桌子,比如说table1
-
table1
包含两列即。id
和data
-
id
是int
但扭曲是data
是JSON
类型并且它的键是可比的 -
table1
包含只有一行 (为了这个问题)
table1
id | 数据 |
---|---|
1 | {'1': 'content1','2': 'content2','3':'content3',......,'10000':'content10000' } |
我想要的:
我想要一个查询,以便它返回一个键范围内的键值对,比如 100 到 200。
我在互联网上搜索的内容:
我在任何地方都只能得到答案,其中人们可以获得具有范围内值的行,但这里的情况是我想要范围内的键值。
解决方法
好的,我从这个数据开始:
MariaDB [test]> select * from table1;
+------+---------------------------------------------------------------------------+
| id | data |
+------+---------------------------------------------------------------------------+
| 1 | {"1": "content1","2": "content2","3":"content3","10000":"content10000"} |
+------+---------------------------------------------------------------------------+
查询:
WITH RECURSIVE data AS (
SELECT
JSON_VALUE(JSON_KEYS(data),'$[0]') AS k,JSON_EXTRACT(data,CONCAT('$.',JSON_VALUE(JSON_KEYS(data),'$[0]'))) AS v,0 AS idx
FROM table1
UNION
SELECT
JSON_VALUE(JSON_KEYS(data),CONCAT('$[',d.idx + 1,']')) AS k,']')))) AS v,d.idx + 1 AS idx
FROM data AS d,table1
WHERE d.idx < JSON_LENGTH(JSON_KEYS(data)) - 1
) SELECT * FROM data;
样本输出(因为如果只有有限的数据):
+-------+----------------+------+
| k | v | idx |
+-------+----------------+------+
| 1 | "content1" | 0 |
| 2 | "content2" | 1 |
| 3 | "content3" | 2 |
| 10000 | "content10000" | 3 |
+-------+----------------+------+
添加 WHERE 子句应该不是问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。