Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie rufe ich ein bestimmtes Objekt aus einer JSON-Spalte in MySQL basierend auf einem Schlüssel-Wert-Paar ab?

Susan Sarandon
Freigeben: 2024-11-03 15:09:30
Original
451 Leute haben es durchsucht

How to Retrieve a Specific Object from a JSON Column in MySQL Based on Key-Value Pair?

MySQL JSON: Suche nach Objekten basierend auf Schlüsselwerten

MySQL-Tabellen verwenden häufig JSON-Spalten, um komplexe Datenstrukturen zu speichern. Bei der Arbeit mit JSON besteht eine häufige Aufgabe darin, ein bestimmtes Objekt basierend auf einem Schlüssel-Wert-Paar abzurufen. Es ist jedoch möglicherweise nicht immer einfach, das Objekt direkt zu finden.

JSON-Schema-Beispiel:

Betrachten 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 Beispiel Daten:

<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

Problem:

Angenommen, wir möchten die Zeichenfolge „Grass“ aus dem Options-JSON-Array abrufen und wissen, dass der entsprechende „Wert“ „ 1." Die alleinige Verwendung von JSON_EXTRACT() erfordert den Index des Arrays, der möglicherweise nicht ohne weiteres verfügbar ist.

Lösung 1: Verwendung von JSON_SEARCH() und Horrible String Manipulation

Dieser Ansatz kombiniert JSON_SEARCH(), um den Index teilweise zu finden, und entfernt dann unerwünschte Teile aus der Zeichenfolge:

<code class="sql">SELECT
JSON_EXTRACT(`options`,CONCAT('$[',REPLACE(REPLACE(JSON_SEARCH(`options`, 'one', '1'), '"$[', ''), '].value"', ''), '].text'))
from `fields`;</code>
Nach dem Login kopieren

Lösung 2: Verwendung von JSON_TABLE()

MySQL 8.0 führt JSON_TABLE ein () um diese Aufgabe zu vereinfachen:

<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

Alternativer Ansatz: Relationales Datenmodell

Für einfachere Datenstrukturen wie dieses Beispiel sollten Sie die Speicherung der Daten in einer relationalen Tabelle in Betracht ziehen mit Spalten für Schlüssel-Wert-Paare, die eine direkte Suche 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 einer JSON-Spalte in MySQL basierend auf einem Schlüssel-Wert-Paar 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