web-dev-qa-db-fra.com

comment effectuer un SELECT sur une colonne JSON dans mysql/mariaDB

comment appliquer la clause WHERE sur une colonne JSON pour exécuter une requête SELECT sur une table comportant deux colonnes (id Integer, attr JSON). Le JSON est imbriqué et dans la condition de filtre, une seule paire clé-valeur de JSON est autorisée. Cette paire de valeurs de clé peut être n'importe où dans Josn.

+----+-----------------------------------------------------------------
| id | attr                                                                                          
|
+----+-----------------------------------------------------------------
|  1 | {"id":"0001","type":"donut","name":"Cake","ppu":0.55}                                         
|
|  2 | {"id":"0002","type":"donut","name":"Cake","ppu":0.55,"batters":
       {"batter1":100,"batter2":200}} 
+----+-----------------------------------------------------------------
3
wenky

Dans MariaDB 10.2, vous pouvez utiliser les fonctions JSON .

Par exemple, si vous voulez sélectionner tous les donuts de votre base de données, vous devez:

SELECT * FROM t WHERE JSON_CONTAINS(attr, '"donut"', '$.type');

Remarque: Dans MariaDB, les fonctions JSON fonctionnent avec tous les types de données texte (VARCHAR, TEXT, etc.). Le JSON type est simplement un alias pour LONGTEXT.

6
markusjm

De la même manière que la réponse de markusjm, vous pouvez sélectionner directement à partir du champ json par:

SELECT json_extract(attr, '$.type') FROM t;
0
MarAvFe