Menyertai Jadual dengan Medan Gabungan Dipisahkan Koma
Apabila menyepadukan data daripada berbilang jadual, mungkin perlu melakukan cantuman pada medan yang mengandungi senarai yang dipisahkan koma. Ini boleh menimbulkan cabaran untuk kaedah gabungan tradisional. Pertimbangkan senario berikut:
Senario:
Terdapat dua jadual, kategori dan filem. Jadual kategori mengandungi kategori dengan ID dan nama unik. Jadual filem termasuk lajur kategori yang menyimpan berbilang ID kategori sebagai senarai dipisahkan koma. Tugasnya ialah untuk menyertai jadual ini, tidak termasuk lajur kategori daripada jadual filem dan sebaliknya memilih nama kategori yang sepadan daripada jadual kategori ke dalam tatasusunan.
Penyelesaian:
Untuk mengatasi cabaran ini, pengubahsuaian kepada sintaks gabungan standard boleh digunakan:
select m.id, group_concat(c.name) from movies m join categories c on find_in_set(c.id, m.categories) group by m.id
Dalam pertanyaan ini, fungsi find_in_set() digunakan dalam keadaan gabungan. Fungsi ini menyemak sama ada ID kategori daripada jadual kategori wujud dalam senarai ID kategori yang dipisahkan koma dalam jadual filem.
Fungsi group_concat() digunakan dalam klausa SELECT untuk menggabungkan semua nama kategori yang sepadan ke dalam tatasusunan. Kumpulan mengikut klausa memastikan bahawa data dikumpulkan mengikut ID filem, menghasilkan satu baris untuk setiap filem dengan nama kategori yang berkaitan.
Contoh:
Pertimbangkan sampel disediakan dalam soalan:
Kategori jadual:
id | name |
---|---|
1 | Action |
2 | Comedy |
4 | Drama |
5 | Dance |
Filem jadual:
id | categories |
---|---|
1 | 2,4 |
2 | 1,4 |
4 | 3,5 |
Menjalankan yang diubah suai join query akan menghasilkan output berikut:
Output jadual:
id | categories |
---|---|
1 | Comedy,Drama |
2 | Action,Drama |
4 | Other,Dance |
Dalam keputusan ini, lajur kategori daripada jadual filem telah dikecualikan dan yang sepadan nama kategori daripada jadual kategori telah dipilih ke dalam tatasusunan untuk setiap filem.
Atas ialah kandungan terperinci Bagaimana untuk Menyertai Jadual dengan Medan Sertaan Dipisahkan Koma: Penyelesaian SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!