JSON in MySQL : 从键范围内的对象获取数据

JSON in MySQL : get data from an object within a range of keys

我有:

table1

id data
1 {'1': 'content1', '2': 'content2', '3':'content3',.......,'10000':'content10000' }

我想要的东西:

我想要一个查询,这样它 returns 我的键值对在一个键范围内,比如 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, 
     JSON_EXTRACT(data, CONCAT('$.',JSON_VALUE(JSON_KEYS(data), CONCAT('$[', d.idx + 1, ']')))) 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 子句应该不是问题。