sql >> Database >  >> RDS >> Mysql

JSON-array lezen in MYSQL

mysql> SET @`json` :=
    -> '[
    '>    {
    '>      "id": 1, "type": 2
    '>    },
    '>    {
    '>      "id": 2, "type": 1
    '>    }
    '> ]';
Query OK, 0 rows affected (0.00 sec)

Je kunt alle ids krijgen in een array:

mysql> SELECT JSON_EXTRACT(@`json` ,'$[*].id');
+----------------------------------+
| JSON_EXTRACT(@`json` ,'$[*].id') |
+----------------------------------+
| [1, 2]                           |
+----------------------------------+
1 row in set (0.00 sec)

Heeft toegang tot elke JSON id :

mysql> SELECT JSON_EXTRACT(@`json` ,'$[0].id');
+----------------------------------+
| JSON_EXTRACT(@`json` ,'$[0].id') |
+----------------------------------+
| 1                                |
+----------------------------------+
1 row in set (0.00 sec)

Probeer:

mysql> DROP PROCEDURE IF EXISTS `new_procedure`;
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER //

mysql> CREATE PROCEDURE `new_procedure`(`json` JSON)
    -> BEGIN
    ->   DECLARE `json_items` BIGINT UNSIGNED DEFAULT JSON_LENGTH(`json`);
    ->   DECLARE `_index` BIGINT UNSIGNED DEFAULT 0;
    -> 
    ->   DROP TEMPORARY TABLE IF EXISTS `jsonTemporary`;
    -> 
    ->   CREATE TEMPORARY TABLE IF NOT EXISTS `jsonTemporary`
    ->     (`id` BIGINT UNSIGNED NOT NULL);
    -> 
    ->   WHILE `_index` < `json_items` DO
    ->     INSERT INTO `jsonTemporary` (`id`)
    ->     VALUES (JSON_EXTRACT(`json`, CONCAT('$[', `_index`, '].id')));
    ->     SET `_index` := `_index` + 1;
    ->   END WHILE;
    -> 
    ->   SELECT `id` FROM `jsonTemporary`;
    ->   DROP TEMPORARY TABLE IF EXISTS `jsonTemporary`;
    -> END//
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;

mysql> CALL `new_procedure`(@`json`);
+----+
| id |
+----+
|  1 |
|  2 |
+----+
2 rows in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

Zie db-fiddle .




  1. Hoe Ruby on Rails met mysql te installeren en het werkend te krijgen, een stapsgewijze handleiding?

  2. App Engine en MySQL

  3. Gevulde MySQL Docker-afbeelding maken tijdens de bouwtijd

  4. mySQL-query die Resource-id #5 retourneert