Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So fragen Sie die JSON-Spalte in MySQL ab

Manchmal müssen Sie möglicherweise ein JSON-Array von Objekten durchsuchen, JSON-Daten extrahieren oder JSON-Daten in MySQL abrufen. In diesem Artikel sehen wir uns an, wie man JSON-Spalten in MySQL abfragt.


So fragen Sie die JSON-Spalte in MySQL ab

Nehmen wir an, Sie haben die folgende Tabelle users(id, details) wo id ist eine Ganzzahl und ein Primärschlüssel, während Details ist eine Spalte vom JSON-Datentyp.

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

Wir werden die folgenden JSON-Daten in unsere Tabelle einfügen.

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 } }'
);


So rufen Sie Daten aus der JSON-Spalte in MySQL ab

MySQL stellt zwei Operatoren ( -> und ->> ) bereit, um Daten aus JSON-Spalten zu extrahieren.

->> erhält den Stringwert, während -> den Wert ohne Anführungszeichen holt.

Hier ist die SQL-Abfrage zum Extrahieren des Browsernamens aus Details Spalte

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     |
+----+--------------+--------------+

Wie Sie sehen können, gibt ->> die Ausgabe als Zeichenfolgen in Anführungszeichen zurück, während -> die Werte so zurückgibt, wie sie sind.

Sie können diese Operatoren auch in der WHERE-Klausel verwenden, wie unten gezeigt.

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      |
+----+--------------+--------------+

Wenn Sie resolution.x abrufen möchten Wert, d. h. von einem Objekt, können Sie dies mit dem Punktoperator (.) tun, wie unten gezeigt.

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

Wenn Sie ein Array-Element aus einem JSON extrahieren möchten, können Sie auf ähnliche Weise mit eckigen Klammern „[ ]“ und dem Index des Array-Elements darauf zugreifen. Hier ist die SQL-Abfrage zum Extrahieren des ersten Elements des Arrays spend .

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


JSON mit Ubiq extrahieren

Das Ubiq Reporting Tool unterstützt alle oben genannten SQL-Abfragen und macht es einfach, SQL-Ergebnisse auf unterschiedliche Weise zu visualisieren. Hier ist die erste oben erwähnte SQL-Abfrage in Ubiq.

Benötigen Sie ein Reporting-Tool für MySQL? Ubiq macht es einfach, Daten innerhalb von Minuten zu visualisieren und in Echtzeit-Dashboards zu überwachen. Probieren Sie es noch heute aus!