Mysql
 sql >> Database >  >> RDS >> Mysql

Come eseguire query sulla colonna JSON in MySQL

A volte potrebbe essere necessario cercare una matrice di oggetti JSON, estrarre dati JSON o recuperare dati JSON in MySQL. In questo articolo, vedremo come interrogare la colonna JSON in MySQL.


Come eseguire query sulla colonna JSON in MySQL

Supponiamo che tu abbia la seguente tabella users(id, details) dove id è un numero intero e una chiave primaria mentre dettagli è una colonna del tipo di dati JSON.

create table users(
    id int auto_increment primary key,
    details json
   );

Inseriremo i seguenti dati JSON nella nostra tabella.

insert into users(details)
    values(
      '{ "page": "/" , 
         "name": "Safari", 
         "os": "Mac", 
         "spend": [100, 50]
         "resolution": { "x": 1920, "y": 1080 } }'
),
(
      '{ "page": "/products", 
         "name": "Chrome", 
         "os": "Windows", 
         "spend": [150, 250]
         "resolution": { "x": 1680, "y": 1050 } }'
),
(
     '{ "page": "/shoes", 
        "name": "Firefox", 
        "os": "Windows", 
        "spend": [200,300]
        "resolution": { "x": 1280, "y": 800 } }'
);


Come recuperare i dati dalla colonna JSON in MySQL

MySQL fornisce due operatori ( -> e ->> ) per estrarre i dati dalle colonne JSON.

->> otterrà il valore della stringa mentre -> recupererà il valore senza virgolette.

Ecco la query SQL per estrarre il nome del browser dai dettagli colonna

mysql> select id, 
       details->>'$.name' as browser_str,
       details->'$.name' as browser_name
       from users;
+----+--------------+--------------+
| id | browser_str  | browser_name |
+----+--------------+--------------+
|  1 | "Safari"     |  Safari      |
|  2 | "Chrome"     |  Chrome      |
|  3 | "Firefox"    |  Firefox     |
+----+--------------+--------------+

Come puoi vedere ->> restituisce l'output come stringhe tra virgolette, mentre -> restituisce i valori come sono.

Puoi anche utilizzare questi operatori nella clausola WHERE come mostrato di seguito.

mysql> select id, 
       details->>'$.name' as browser_str,
       details->'$.name' as browser_name
       from users
       where ->>'$.name'="Chrome";
+----+--------------+--------------+
| id | browser_str  | browser_name |
+----+--------------+--------------+
|  2 | "Chrome"     |  Chrome      |
+----+--------------+--------------+

Se vuoi recuperare risoluzione.x valore, ovvero da un oggetto, puoi farlo utilizzando l'operatore punto (.), come mostrato di seguito.

mysql> select details->'$.resolution.x' as  width
       from users;
+----+-----------+
| id |  width    |
+----+-----------+
|  1 | 1920      |
|  2 | 1680      |
|  3 | 1280      |
+----+-----------+

Allo stesso modo, se desideri estrarre un elemento dell'array da un JSON, puoi accedervi utilizzando le parentesi quadre "[ ]" e l'indice dell'elemento dell'array. Ecco la query SQL per estrarre il primo elemento dell'array spende .

mysql> select details->>'$.spend[0]' as spend
       from users;
+----+-----------+
| id |  spend    |
+----+-----------+
|  1 | 100       |
|  2 | 150       |
|  3 | 200       |
+----+-----------+


Estrai JSON usando Ubiq

Lo strumento Ubiq Reporting supporta tutte le query SQL di cui sopra e semplifica la visualizzazione dei risultati SQL in diversi modi. Ecco la prima query SQL menzionata sopra, in Ubiq.

Hai bisogno di uno strumento di reporting per MySQL? Ubiq semplifica la visualizzazione dei dati in pochi minuti e il monitoraggio in dashboard in tempo reale. Provalo oggi!