Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Sertai Jadual MySQL Berdasarkan Medan JSON?

Bagaimana untuk Sertai Jadual MySQL Berdasarkan Medan JSON?

Patricia Arquette
Patricia Arquetteasal
2024-10-30 16:04:33220semak imbas

How to Join MySQL Tables Based on JSON Fields?

Menyertai Jadual MySQL Menggunakan Medan JSON

Apabila bekerja dengan medan JSON dalam MySQL, selalunya perlu untuk menyertai jadual berdasarkan data yang disimpan dalam ini padang. Walaupun menyertai jadual menggunakan perhubungan nilai kunci tradisional adalah mudah, melaksanakan gabungan berdasarkan kandungan medan JSON boleh memberikan cabaran tambahan.

Satu senario biasa melibatkan penyimpanan senarai ID dalam medan JSON dalam jadual (walaupun amalan ini tidak disyorkan untuk prestasi optimum dan integriti data). Untuk menggambarkan cara mendekati situasi ini, mari kita pertimbangkan contoh ringkas:

<code class="sql">CREATE TABLE user (
    user_id INT,
    user_name VARCHAR(50),
    user_groups JSON
);

CREATE TABLE user_group (
    user_group_id INT,
    group_name VARCHAR(50)
);

INSERT INTO user_group (user_group_id, group_name) VALUES (1, 'Group A');
INSERT INTO user_group (user_group_id, group_name) VALUES (2, 'Group B');
INSERT INTO user_group (user_group_id, group_name) VALUES (3, 'Group C');

INSERT INTO user (user_id, user_name, user_groups) VALUES (101, 'John', '[1,3]');</code>

Di sini, kami mempunyai jadual pengguna dengan medan JSON bernama user_groups yang menyimpan senarai ID kumpulan. Matlamat kami adalah untuk mencipta pertanyaan yang mengembalikan hasil berikut:

user_id | user_name | user_group_id | group_name|
-------------------------------------------------
101     | John      | 1             | Group A
101     | John      | 3             | Group C

Untuk mencapai matlamat ini, kami boleh memanfaatkan fungsi JSON_CONTAINS(), yang membolehkan kami menyemak sama ada dokumen JSON mengandungi nilai tertentu. Dengan menggunakan fungsi ini, kita boleh menyertai jadual pengguna dan kumpulan_pengguna seperti berikut:

<code class="sql">SELECT
    u.user_id,
    u.user_name,
    g.user_group_id,
    g.group_name
FROM
    user u
LEFT JOIN
    user_group g ON JSON_CONTAINS(u.user_groups, CAST(g.user_group_id as JSON), '$')</code>

Pertanyaan ini pada asasnya berulang melalui elemen medan kumpulan_pengguna dan menyemak sama ada ia sepadan dengan id_kumpulan_pengguna bagi mana-mana kumpulan dalam jadual kumpulan_pengguna. Jika padanan ditemui, data yang sepadan daripada jadual kumpulan_pengguna dikembalikan.

Dengan menggunakan JSON_CONTAINS(), kami boleh melakukan gabungan dengan cekap berdasarkan data yang disimpan dalam medan JSON, membolehkan kami mengakses dan memanipulasi data kompleks struktur dengan cara yang mudah dan fleksibel.

Atas ialah kandungan terperinci Bagaimana untuk Sertai Jadual MySQL Berdasarkan Medan JSON?. 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