Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Baris Berasingan untuk Setiap Tiket dengan Penyelesaian Berkaitan Menggunakan GROUP_CONCAT dan LEFT JOIN dalam MySQL?
Dalam MySQL, fungsi GROUP_CONCAT boleh digunakan bersama-sama dengan LEFT JOIN untuk mendapatkan data daripada berbilang jadual. Walau bagaimanapun, pengguna mungkin menghadapi masalah prestasi jika tidak digunakan dengan betul.
Pertimbangkan pangkalan data meja bantuan dengan jadual untuk tiket (Tiket) dan penyelesaian (Penyelesaian). Pertanyaan ditulis untuk mendapatkan semula semua tiket dengan entri penyelesaian yang sepadan menggunakan pernyataan berikut:
<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>
Pertanyaan ini mengembalikan satu baris dengan maklumat daripada tiket pertama dan semua penyelesaian daripada kedua-dua tiket. Ini tidak disengajakan, kerana kami menjangkakan baris yang berasingan untuk setiap tiket dengan penyelesaian yang berkaitan.
Untuk menangani isu ini, pertanyaan boleh diubah suai seperti berikut:
<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>
Dalam pertanyaan yang disemak ini, subkueri dalam klausa LEFT JOIN mendapatkan semula penyelesaian gabungan untuk setiap tiket menggunakan GROUP_CONCAT dalam kumpulan yang sesuai. Pertanyaan luar kemudiannya menggabungkan hasil ini dengan jadual Tiket utama menggunakan medan ticket_id.
Pendekatan alternatif ialah menggunakan pertanyaan bersarang innerhalb der Haupt-SELECT-Anweisung:
<code class="sql">SELECT t.*, (SELECT GROUP_CONCAT(s.soution) FROM SOLUTIONS s WHERE s.ticket_id = t.ticket_id) AS combinedsolutions FROM TICKETS t</code>
Pendekatan ini melaksanakan tugas yang sama dengan membenamkan pertanyaan GROUP_CONCAT dalam penyataan SELECT luar.
Dengan menggunakan salah satu daripada pengubahsuaian ini, pertanyaan kini sepatutnya mendapatkan semula baris berasingan untuk setiap tiket dengan betul, setiap satu baris yang mengandungi maklumat tiket dan penyelesaian yang sepadan untuk tiket itu.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Baris Berasingan untuk Setiap Tiket dengan Penyelesaian Berkaitan Menggunakan GROUP_CONCAT dan LEFT JOIN dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!