Maison > base de données > tutoriel mysql > Comment récupérer un objet spécifique d'un champ JSON dans une table MySQL par valeur clé ?

Comment récupérer un objet spécifique d'un champ JSON dans une table MySQL par valeur clé ?

Susan Sarandon
Libérer: 2024-11-01 03:11:02
original
398 Les gens l'ont consulté

How to Retrieve a Specific Object from a JSON Field in a MySQL Table by Key Value?

Recherche d'objets dans MySQL JSON par valeur de clé

Scénario :

Vous travaillez avec un champ JSON dans un Table MySQL et que vous souhaitez récupérer un objet spécifique à partir de celle-ci tout en recherchant une valeur de clé particulière.

Structure du document JSON :

Considérez le schéma suivant :

<code class="sql">CREATE TABLE `fields` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `label` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
  `options` json DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;</code>
Copier après la connexion

Avec des exemples de données :

<code class="sql">INSERT INTO `fields` (label, options) VALUES
(
  'My Field', 
  '[{"text": "Grass", "value": "1"}, {"text": "Synthetic (New Type - Soft)", "value": "2"}, {"text": "Synthetic  (Old Type - Hard)", "value": "3"}, {"text": "Gravel", "value": "5"}, {"text": "Clay", "value": "6"}, {"text": "Sand", "value": "7"}, {"text": "Grass/Synthetic Mix", "value": "8"}]'
);</code>
Copier après la connexion

Défi :

Vous devez sélectionner la valeur du texte "Grass" dans le champ d'options en fonction d'un recherchez la valeur "1".

Solution MySQL 8.0 :

MySQL 8.0 a introduit la fonction JSON_TABLE(), offrant une solution plus efficace :

<code class="sql">select field_options.* from fields cross join 
json_table(fields.options, 
'$[*]' columns(
  text text path '$.text',
  value text path '$.value'
 )
) as field_options 
where field_options.value = 1;</code>
Copier après la connexion

Cette requête utilise la jointure croisée et JSON_TABLE() pour récupérer les colonnes de texte et de valeur pour chaque objet dans le champ d'options.

Préoccupations avec JSON_TABLE :

Cependant, l'utilisation de JSON_TABLE() peut être complexe et doit être répétée à chaque fois qu'une requête comme celle-ci est nécessaire.

Recommandation :

Au lieu d'utiliser JSON, il peut être plus simple de stocker les données dans un tableau avec des colonnes dédiées pour les paires texte et valeur. Cela permettrait des recherches simples en utilisant la syntaxe SQL normale :

<code class="sql">SELECT * FROM field_options WHERE value = '1';</code>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal