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

Patricia Arquette
Lepaskan: 2024-11-05 00:19:01
asal
726 orang telah melayarinya

How to Efficiently Retrieve a Text Value from a JSON Object in MySQL Based on a Key Value?

Mengambil semula Objek daripada JSON Keys dalam MySQL

Masalah:
Apabila bekerja dengan data JSON dalam pangkalan data MySQL, bagaimana anda boleh cekap cari objek tertentu berdasarkan nilai kunci semasa membuat pertanyaan menggunakan kunci lain?

Skema:

Pertimbangkan contoh skema berikut:

<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>
Salin selepas log masuk
<code class="sql">INSERT INTO `fields` (label, options) VALUES
(
  'My Field', 
  '[{"text": "Grass", "value": "1"}, {"text": "Synthetic (New Type - Soft)", "value": "2"}, ...]');</code>
Salin selepas log masuk

Objektif:

Memandangkan ID medan, dapatkan semula nilai teks yang sepadan bagi pilihan tertentu berdasarkan nilainya.

Sebelumnya Penyelesaian:

Percubaan awal yang terlibat menggunakan gabungan fungsi JSON. Walau bagaimanapun, pendekatan ini menyusahkan dan memerlukan ungkapan yang kompleks.

Fungsi JSON_TABLE() (MySQL 8.0):

MySQL 8.0 memperkenalkan fungsi JSON_TABLE(), yang memudahkan proses:

<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;

+-------+-------+
| text  | value |
+-------+-------+
| Grass | 1     |
+-------+-------+</code>
Salin selepas log masuk

Alternatif Bukan JSON:

Penyelesaian yang lebih mudah ialah menukar data JSON kepada jadual ternormal:

<code class="sql">CREATE TABLE `field_options` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `field_id` int(10) unsigned NOT NULL,
  `text` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
  `value` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  FOREIGN KEY (`field_id`) REFERENCES `fields`(`id`)
);</code>
Salin selepas log masuk
<code class="sql">INSERT INTO `field_options` (field_id, text, value) VALUES
(
  1, 'Grass', '1'),
  (1, 'Synthetic (New Type - Soft)', '2'),
  ...
);</code>
Salin selepas log masuk

Pendekatan ini membolehkan carian cekap menggunakan teknik SQL tradisional:

<code class="sql">SELECT *
FROM `field_options`
WHERE value = '1';</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Nilai Teks dengan Cekap daripada 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!