Dalam pembangunan perniagaan harian, biasanya medan dalam pangkalan data mysql perlu menyimpan rentetan format json apabila membuat pertanyaan Kadangkala data json adalah besar, dan tidak cekap dan menyusahkan untuk mendapatkan semuanya dan kemudian menghuraikan dan menanyakannya setiap kali
Mujurlah, Mysql5.7 dan versi yang lebih baru menyediakan fungsi json_extract, yang boleh menanyakan nilai melalui kunci. ( Jika ia adalah jenis tatasusunan json, anda boleh mendapatkan nilai kedudukan yang sepadan melalui subskrip), yang sangat mudah.
Fungsi baharu selepas versi Mysql5.7, Mysql menyediakan jenis Json asli, nilai Json tidak akan menjadi. kemudian disimpan sebagai rentetan, tetapi dalam format binari dalaman yang membolehkan pembacaan pantas elemen dokumen. Teks Json akan disahkan secara automatik apabila memasukkan atau mengemas kini lajur Json Teks yang gagal pengesahan akan menghasilkan mesej ralat. Teks Json dicipta dengan cara standard dan kebanyakan operator perbandingan boleh digunakan untuk operasi perbandingan, seperti: =, <, <=, >, >=, <>, != dan <= > ;.
Data yang disimpan ialah rentetan json (jenis ialah vachar).
Jika anda ingin menanyakan nilai medan tertentu dalam json, kaedah yang digunakan ialah: JSON_EXTRACT().
Sintaks:
**JSON_EXTRACT(json_doc, path[, path] …)**
Petua penggunaan:
Jika rentetan json bukan tatasusunan, gunakan $.字段名
Jika rentetan json ialah tatasusunan [Array], gunakan $[对应的索引ID]
Senario penggunaan: Jika jumlah data tidak besar, ia boleh digunakan jika rentetan json besar Walau bagaimanapun, jika jumlah data adalah besar, ia tidak disyorkan.
untuk mendapatkan medan biasa $.KEY
Perhatikan bahawa indeks bermula dari 0$.KEY[index]
select json_extract('{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}',"$.name") as name, json_extract('{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}',"$.tel_no") as tel_no, json_extract('{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}',"$.hobbies[0]") as hobby_1, json_extract('{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}',"$.hobbies[1]") as hobby_2, json_extract('{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}',"$.hobbies[2]") as hobby_3, json_extract('{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}',"$.hobbies[3]") as hobby_4;
<. 🎜>
3.2 Ekstrak Nilai tatasusunan jsonname | tel_no | hobby_1 | hobby_2 | hobby_3 | hobby_4 |
---|---|---|---|---|---|
“zhangsan” | 136-6666-6666 | “basketball” | “run” | “sing” | NULL |
id | name | tags |
---|---|---|
1 | zhangsan | [“COMMON”] |
2 | lisi | [“VIP”] |
3 | wangwu | [“VVIP”,“PLATINUM”] |
4 | zhaoliu |
select id, name, tags, json_extract(if(LENGTH(tags)>0,tags, '[]'),"$[0]") # 如果tags无数据,赋值为空数组 from site_user;
Keputusan:
Atas ialah kandungan terperinci Bagaimana untuk menggunakan fungsi json_extract dalam MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!