Bagaimana untuk Cekap Mendapatkan Objek JSON dalam MySQL Berdasarkan Nilai Utama?

Mary-Kate Olsen
Lepaskan: 2024-11-02 01:54:02
asal
237 orang telah melayarinya

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

Mencari Objek berdasarkan Nilai Utama dalam MySQL JSON

Apabila bekerja dengan data JSON dalam MySQL, mencari objek berdasarkan nilai kunci tertentu boleh menjadi mencabar. Ini kerana kaedah tradisional memerlukan pengetahuan tentang indeks tatasusunan atau teknik pengekstrakan kompleks.

JSON_TABLE() to the Rescue

Nasib baik, MySQL 8.0 memperkenalkan fungsi JSON_TABLE() , yang memudahkan proses ini. Pertimbangkan skema berikut:

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;
Salin selepas log masuk

Dengan data dimasukkan sebagai:

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"}]'
);
Salin selepas log masuk

Untuk mencari rentetan "Rumput" dengan memberikan kunci "1", anda boleh menggunakan pertanyaan berikut :

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;
Salin selepas log masuk

Pertanyaan ini akan mengembalikan objek yang diingini:

+-------+-------+
| text  | value |
+-------+-------+
| Grass | 1     |
+-------+-------+
Salin selepas log masuk

Alternatif: Struktur Jadual Tradisional

Sementara JSON_TABLE() menyediakan penyelesaian, ia boleh menyusahkan untuk digunakan berulang kali. Pendekatan alternatif ialah menyimpan data dalam struktur jadual tradisional dengan lajur yang berasingan untuk teks dan nilai, seperti berikut:

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;
Salin selepas log masuk

Dengan data dimasukkan sebagai:

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');
Salin selepas log masuk

Menggunakan struktur ini, carian menjadi lebih mudah:

SELECT * FROM field_options WHERE value = '1';
Salin selepas log masuk

Pendekatan ini menghilangkan keperluan untuk pertanyaan JSON yang kompleks, menjadikan pengambilan data lebih mudah.

Atas ialah kandungan terperinci Bagaimana untuk Cekap Mendapatkan Objek JSON dalam MySQL Berdasarkan Nilai Utama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan