Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie kann ich JSON-Objekte in MySQL basierend auf Schlüsselwerten effizient abrufen?

Mary-Kate Olsen
Freigeben: 2024-11-02 01:54:02
Original
166 Leute haben es durchsucht

How to Efficiently Retrieve JSON Objects in MySQL Based on Key Values?

Objekte basierend auf Schlüsselwerten in MySQL JSON finden

Bei der Arbeit mit JSON-Daten in MySQL kann das Auffinden eines Objekts basierend auf einem bestimmten Schlüsselwert eine Herausforderung sein. Dies liegt daran, dass herkömmliche Methoden Kenntnisse über den Array-Index oder komplexe Extraktionstechniken erfordern.

JSON_TABLE() zur Rettung

Glücklicherweise wurde mit MySQL 8.0 die Funktion JSON_TABLE() eingeführt , was diesen Prozess vereinfacht. Betrachten Sie das folgende Schema:

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

Mit eingefügten Daten als:

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"}]'
);
Nach dem Login kopieren

Um nach der Zeichenfolge „Gras“ zu suchen, indem Sie den Schlüssel „1“ angeben, können Sie die folgende Abfrage verwenden :

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

Diese Abfrage gibt das gewünschte Objekt zurück:

+-------+-------+
| text  | value |
+-------+-------+
| Grass | 1     |
+-------+-------+
Nach dem Login kopieren

Alternative: Traditionelle Tabellenstruktur

Während JSON_TABLE() ein bereitstellt Lösung kann die wiederholte Verwendung umständlich sein. Ein alternativer Ansatz besteht darin, Daten wie folgt in einer herkömmlichen Tabellenstruktur mit separaten Spalten für Text und Wert zu speichern:

CREATE TABLE field_options (
  id int(10) unsigned NOT NULL AUTO_INCREMENT,
  text varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
  value varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Nach dem Login kopieren

Mit eingefügten Daten als:

INSERT INTO field_options (text, value) VALUES
('Grass', '1'),
('Synthetic (New Type - Soft)', '2'),
('Synthetic  (Old Type - Hard)', '3'),
('Gravel', '5'),
('Clay', '6'),
('Sand', '7'),
('Grass/Synthetic Mix', '8');
Nach dem Login kopieren

Mit dieser Struktur Die Suche wird einfacher:

SELECT * FROM field_options WHERE value = '1';
Nach dem Login kopieren

Dieser Ansatz macht komplexe JSON-Abfragen überflüssig und macht den Datenabruf einfacher.

Das obige ist der detaillierte Inhalt vonWie kann ich JSON-Objekte in MySQL basierend auf Schlüsselwerten effizient abrufen?. 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!