Bagaimana untuk Mendapatkan Baris Berasingan untuk Setiap Tiket dengan Penyelesaian Berkaitan Menggunakan GROUP_CONCAT dan LEFT JOIN dalam MySQL?

Susan Sarandon
Lepaskan: 2024-10-26 10:05:29
asal
853 orang telah melayarinya

How to Retrieve Separate Rows for Each Ticket with Associated Solutions Using GROUP_CONCAT and LEFT JOIN in MySQL?

MySQL: MENYERTAI GROUP_CONCAT dengan LEFT JOIN

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.

Pernyataan Masalah

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>
Salin selepas log masuk

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.

Penyelesaian

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>
Salin selepas log masuk

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.

Penyelesaian Ganti

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!