Rumah > Artikel > pangkalan data > Bagaimana untuk Mendapatkan Objek Khusus dari Medan JSON dalam Jadual MySQL 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!