Comment écrire une requête MySQL de base qui a un WHERE sur une propriété dans un champ de type de données JSON? Je ne vois pas la clause where de base q pour les champs json sur SO.
Quelque chose comme ça, mais bien sûr, cela ne fonctionne pas:
SELECT * from my_table where meta_data->name = 'bob';
SELECT * from my_table where meta_data[name] IS NOT NULL;
Quelques exemples de la façon d'interroger un champ de type de données json:
SELECT * FROM users WHERE JSON_EXTRACT(meta_data, "$.first_name") = 'bob';
SELECT * FROM users WHERE JSON_EXTRACT(meta_data, "$.age") IS NOT NULL;
SELECT * FROM users WHERE JSON_EXTRACT(meta_data, "$.accepted_policy") = true;
Avec mysql 5.7.9 +
Vous pouvez également faire cela (raccourci pour JSON_EXTRACT):
SELECT * FROM users WHERE meta_data->"$.first_name" = 'bob'
Vous remarquerez peut-être que les résultats de vos données json sont "cités". Vous pouvez utiliser JSON_UNQUOTE, ou vous pouvez utiliser ceci, qui est un raccourci de JSON_EXTRACT & JSON_UNQUOTE:
SELECT meta_data->>"$.first_name" FROM users WHERE meta_data->>"$.first_name" IS NOT NULL
Et pour sélectionner des données dans des sous-objets:
SELECT meta_data->>"$.address.tel" FROM users WHERE meta_data->>"$.address.street" = "123 Main St"
documents: https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html