MySQL GROUP_CONCAT dengan LEFT JOIN Isu dan Penyelesaian
Dalam MySQL, fungsi GROUP_CONCAT biasanya digunakan untuk menggabungkan rentetan daripada berbilang baris dalam kumpulan . Walau bagaimanapun, apabila menggunakan fungsi ini dengan LEFT JOIN, adalah mungkin untuk menghadapi situasi di mana berbilang baris digabungkan menjadi satu baris dan bukannya dipisahkan.
Pernyataan Masalah
Pertimbangkan senario berikut:
Pertanyaan yang digunakan:
<code class="SQL">SELECT Tickets.*, GROUP_CONCAT(Solutions.solution) AS CombinedSolutions FROM Tickets LEFT JOIN Solutions ON Tickets.id = Solutions.ticket_id ORDER BY Tickets.id;</code>
Isu
Ini pertanyaan mengembalikan hanya satu baris, dengan maklumat tiket 1 dan kedua-dua entri penyelesaian tiket 1 dan tiket 2 digabungkan bersama.
Penyelesaian
Untuk menyelesaikan isu ini, gunakan subkueri atau jadual terbitan dalam pernyataan JOIN untuk mengumpulkan penyelesaian mengikut ID tiket:
Penyelesaian 1: Menggunakan Subquery
<code class="SQL">SELECT t.*, x.combinedsolutions FROM TICKETS t LEFT JOIN (SELECT s.ticket_id, GROUP_CONCAT(s.solution) AS combinedsolutions FROM SOLUTIONS s GROUP BY s.ticket_id) x ON x.ticket_id = t.ticket_id</code>
Penyelesaian 2: Menggunakan Jadual Terbitan
<code class="SQL">SELECT t.*, (SELECT GROUP_CONCAT(s.solution) FROM SOLUTIONS s WHERE s.ticket_id = t.ticket_id) AS combinedsolutions FROM TICKETS t</code>
Dengan mengumpulkan penyelesaian sebelum menyertai, pertanyaan kini mengembalikan baris berasingan untuk setiap tiket, dengan penyelesaian sepadannya digabungkan menjadi satu rentetan.
Atas ialah kandungan terperinci Bagaimana Menggunakan GROUP_CONCAT dengan betul dengan LEFT JOIN dalam MySQL untuk Menggabungkan Penyelesaian setiap Tiket?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!