Menggabungkan Baris MySQL ke dalam Medan Tunggal dengan GROUP_CONCAT()
Apabila bekerja dengan pangkalan data MySQL, anda selalunya perlu menyatukan data daripada berbilang baris ke dalam satu medan untuk pembentangan yang lebih jelas atau untuk mengurangkan lebihan data. Ini amat berguna apabila berurusan dengan data berkaitan yang tersebar merentas jadual yang berbeza. Contohnya, bayangkan menggabungkan maklumat pengguna dengan hobi mereka yang berkaitan.
Fungsi GROUP_CONCAT()
menyediakan penyelesaian yang mudah. Ia menggabungkan nilai daripada berbilang baris ke dalam satu rentetan, dipisahkan oleh pembatas yang ditentukan.
Cara Menggunakan GROUP_CONCAT():
Mengumpulkan Baris: Mula-mula, kumpulkan baris yang anda ingin gabungkan menggunakan medan biasa. Ini memastikan GROUP_CONCAT()
beroperasi pada data berkaitan.
<code class="language-sql">SELECT person_id, GROUP_CONCAT(hobbies SEPARATOR ', ') FROM peoples_hobbies GROUP BY person_id;</code>
Mengalih Keluar Pendua (Pilihan): Gunakan kata kunci DISTINCT
untuk mengelakkan daripada memasukkan nilai pendua dalam rentetan yang digabungkan.
<code class="language-sql">SELECT person_id, GROUP_CONCAT(DISTINCT hobbies SEPARATOR ', ') FROM peoples_hobbies GROUP BY person_id;</code>
Nilai Isih (Pilihan): Susun nilai yang digabungkan menggunakan klausa ORDER BY
.
<code class="language-sql">SELECT person_id, GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ') FROM peoples_hobbies GROUP BY person_id;</code>
Pertimbangan Penting:
Had Panjang: GROUP_CONCAT()
mempunyai had keluaran lalai (biasanya 1024 bait). Untuk meningkatkan ini, laraskan group_concat_max_len
pembolehubah sistem sebelum menjalankan pertanyaan anda:
<code class="language-sql"> SET group_concat_max_len = 2048; -- Adjust the value as needed</code>
Pengiraan Panjang Dinamik: Untuk pendekatan yang lebih dinamik, kirakan group_concat_max_len
yang diperlukan berdasarkan data anda:
<code class="language-sql"> SET group_concat_max_len = CAST((SELECT SUM(LENGTH(hobbies)) + COUNT(*) * LENGTH(', ') FROM peoples_hobbies GROUP BY person_id) AS UNSIGNED); ``` This calculates the total length of all hobbies plus the delimiter lengths.</code>
Dengan mengikuti langkah dan pertimbangan ini, anda boleh menggunakan GROUP_CONCAT()
dengan berkesan untuk menggabungkan berbilang baris MySQL dengan cekap ke dalam satu medan yang lebih mudah diurus.
Atas ialah kandungan terperinci Bagaimana saya boleh menggabungkan pelbagai baris mysql ke dalam satu medan menggunakan kumpulan_concat ()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!