Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Mendapatkan Objek Khusus dari Medan JSON dalam Jadual MySQL mengikut Nilai Utama?

Bagaimana untuk Mendapatkan Objek Khusus dari Medan JSON dalam Jadual MySQL mengikut Nilai Utama?

Susan Sarandon
Susan Sarandonasal
2024-11-01 03:11:02300semak imbas

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

Mencari Objek dalam MySQL JSON mengikut Nilai Utama

Senario:

Anda sedang bekerja dengan medan JSON dalam Jadual MySQL dan ingin mendapatkan semula objek tertentu dari dalamnya semasa mencari kunci tertentu nilai.

Struktur Dokumen JSON:

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

Dengan data sampel:

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

Cabaran:

Anda perlu pilih nilai teks "Rumput" daripada medan pilihan berdasarkan carian untuk nilai "1".

Penyelesaian MySQL 8.0:

MySQL 8.0 memperkenalkan JSON_TABLE( ), menyediakan penyelesaian yang lebih cekap:

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

Pertanyaan ini menggunakan cantuman silang dan JSON_TABLE() untuk mendapatkan semula teks dan lajur nilai bagi setiap objek dalam medan pilihan.

Kebimbangan dengan JSON_TABLE:

Walau bagaimanapun, menggunakan JSON_TABLE() boleh menjadi rumit dan mesti diulang setiap kali pertanyaan seperti ini diperlukan.

Syor:

Daripada menggunakan JSON, mungkin lebih mudah untuk menyimpan data dalam jadual dengan lajur khusus untuk pasangan teks dan nilai. Ini akan membolehkan carian mudah menggunakan sintaks SQL biasa:

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

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

Kenyataan:
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