Heim > Datenbank > MySQL-Tutorial > Wie rufe ich ein bestimmtes Objekt aus einem JSON-Feld in einer MySQL-Tabelle nach Schlüsselwert ab?

Wie rufe ich ein bestimmtes Objekt aus einem JSON-Feld in einer MySQL-Tabelle nach Schlüsselwert ab?

Susan Sarandon
Freigeben: 2024-11-01 03:11:02
Original
391 Leute haben es durchsucht

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

Objekte in MySQL JSON anhand des Schlüsselwerts finden

Szenario:

Sie arbeiten mit einem JSON-Feld in einem MySQL-Tabelle und möchten ein bestimmtes Objekt daraus abrufen, während Sie nach einem bestimmten Schlüsselwert suchen.

JSON-Dokumentstruktur:

Beachten Sie das folgende Schema:

<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>
Nach dem Login kopieren

Mit Beispieldaten:

<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>
Nach dem Login kopieren

Herausforderung:

Sie müssen den Textwert „Gras“ aus dem Optionsfeld basierend auf a auswählen Suchen Sie nach dem Wert „1“.

MySQL 8.0-Lösung:

MySQL 8.0 führte die Funktion JSON_TABLE() ein und bietet eine effizientere Lösung:

<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>
Nach dem Login kopieren

Diese Abfrage verwendet den Cross-Join und JSON_TABLE(), um die Text- und Wertspalten für jedes Objekt im Optionsfeld abzurufen.

Bedenken hinsichtlich JSON_TABLE:

Die Verwendung von JSON_TABLE() kann jedoch komplex sein und muss jedes Mal wiederholt werden, wenn eine solche Abfrage erforderlich ist.

Empfehlung:

Anstelle der Verwendung von JSON kann dies der Fall sein Es wäre einfacher, Daten in einer Tabelle mit dedizierten Spalten für die Text- und Wertepaare zu speichern. Dies würde eine unkomplizierte Suche mit der regulären SQL-Syntax ermöglichen:

<code class="sql">SELECT * FROM field_options WHERE value = '1';</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie rufe ich ein bestimmtes Objekt aus einem JSON-Feld in einer MySQL-Tabelle nach Schlüsselwert ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage