Rumah >pangkalan data >tutorial mysql >Bagaimana untuk mengalih keluar medan json dalam mysql
Kadangkala sesetengah maklumat disimpan dalam pangkalan data dalam bentuk json Jika terlalu panjang, sql akan digunakan semasa proses mendapatkan semula. operasi akan menjadi lebih perlahan, dan ia akan menjadi lebih membazir jika anda hanya mendapat nilai kunci tertentu
±—±---------------------------------------------------------------+ | id | data | ±—±---------------------------------------------------------------+ | 1 | {“Tel”: “132223232444”, “name”: “david”, “address”: “Beijing”} | | 2 | {“Tel”: “13390989765”, “name”: “Mike”, “address”: “Guangzhou”} | ±—±---------------------------------------------------------------+
select json_extract('{"name":"Zhaim","tel":"13240133388"}',"$.tel");
select get_json_object(i.extra, '$.sale_currency'); select sum(get_json_object(i.extra, '$.sale_price') * i.count) as sale_price;
{ "selects" :{ "20071090" :{ "NN" : 41, "LXFS1" : "12365", "GH" : "20071090", "RZZW" : "办公室主任", "sxzym" : "园林植物与观赏园艺", "ZC" : "副教授", "XGW" : "行政管理后勤", "XB" : "男", "ZZMM" : "中共党员", "ZWZC" : "高级职称", "MZ" : "汉", "CSRQ" : 307123200000, "XL" : "硕士", "selectKey" : "20071090", "XM" : "张三", "GZBM" : "办公室", "PZGW" : "副教授三级岗位", "XW" : "农学硕士" }}}
Dalam pangkalan data mysql ini, saya ingin mendapatkan nama yang ditandakan dengan warna merah, seperti yang ditunjukkan dalam gambar di atas
Buat paparan dan ambil nama medan ini Memandangkan kuncinya: "20071090" adalah dinamik dan tidak pasti, dan hanya akan muncul sekali di tempat ini, pertama. Saya mengambil kekunci lapisan pertama==>selects Nilai
SELECT ZDLSXM->'$.selects' from VI_YXGR
Atas dasar ini, keluarkan lapisan lain Memandangkan lapisan ini ialah kunci dinamik, langkah pertama Kaedah ZDLSXM->'$ tidak boleh digunakan, jadi saya memilih kaedah substring_index untuk mengeluarkan pendakap, dan kemudian menggunakan CONCAT() untuk menyambungkannya ke dalam json baharu 🎜>
SELECT CONCAT("{",substring_index(substring_index(ZDLSXM->'$.selects', '{', -1),"}",1),"}") from VI_YXGRAnda boleh ambil nama ini dengan membungkusnya semula
SELECT SE_ZDLSXM->'$.name' AS ZDLSXM from ( SELECT CONCAT("{",substring_index(substring_index(ZDLSXM->'$.selects', '{', -1),"}",1),"}") as SE_ZDLSXM from VI_YXGR ) sss
Atas ialah kandungan terperinci Bagaimana untuk mengalih keluar medan json dalam mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!