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

Susan Sarandon
Lepaskan: 2024-11-01 03:11:02
asal
299 orang telah melayarinya

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

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

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

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

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!

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!