MySQL选择值为JSON的最后一个键

时间:2017-11-22 09:57:55

标签: mysql json

我有JSON之类的:

{"1": "6", "2": "10", "3": "12"}

我希望使用MySQL查询得到最后的密钥和值,以获得如下输出:

3x12

3是最后一个键,12是最后一个键值...

有没有MySQL查询呢?我知道使用读取上面发布的整个MySQL字段值然后循环,如果键是最后打印它的值和键...但是如果可以在MySQL查询中获得此输出?

我正在使用这个读取MySQL字段值并获取最后一个键和值的php ...但我不知道如何在mysql中执行此操作:

$json = json_decode('{"1": "6", "2": "10", "3": "12"}', true);

$value = end($json);
$key   = key($json);

echo 'KEY: '.$key.'...VALUE: '.$value;

1 个答案:

答案 0 :(得分:1)

您可以尝试以下内容,根据需要进行调整:

mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.7.20    |
+-----------+
1 row in set (0.00 sec)

mysql> SET @`json` := '
    '> {
    '>   "1": "6",
    '>   "2": "10",
    '>   "3": "12"
    '> }
    '> ';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT
    ->   CONCAT(
    ->     JSON_UNQUOTE(@`key`),
    ->     'x',
    ->     JSON_UNQUOTE(
    ->       JSON_EXTRACT(@`json`,
    ->                    CONCAT('$.', @`key`)
    ->       )
    ->     )
    ->   ) `value`
    -> FROM (
    ->   SELECT @`key` := JSON_EXTRACT(
    ->                      JSON_KEYS(@`json`),
    ->                      CONCAT('$[', JSON_LENGTH(@`json`) - 1, ']')
    ->                    )
    -> ) `init`;
+-------+
| value |
+-------+
| 3x12  |
+-------+
1 row in set (0.00 sec)

请参阅db-fiddle