In MySQL kann die Funktion GROUP_CONCAT in Verbindung mit LEFT JOIN verwendet werden, um Daten aus mehreren Tabellen abzurufen. Bei unsachgemäßer Verwendung kann es jedoch zu Leistungsproblemen kommen.
Erwägen Sie eine Helpdesk-Datenbank mit Tabellen für Tickets (Tickets) und Lösungen (Solutions). Mit der folgenden Anweisung wird eine Abfrage geschrieben, um alle Tickets mit ihren entsprechenden Lösungseinträgen abzurufen:
<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>
Diese Abfrage gibt eine einzelne Zeile mit Informationen aus dem ersten Ticket und allen Lösungen aus beiden Tickets zurück. Dies ist unbeabsichtigt, da wir für jedes Ticket eine separate Zeile mit den zugehörigen Lösungen erwarten.
Um dieses Problem zu beheben, kann die Abfrage wie folgt geändert werden:
<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>
In dieser überarbeiteten Abfrage ruft die Unterabfrage in der LEFT JOIN-Klausel die kombinierten Lösungen für jedes Ticket mithilfe von GROUP_CONCAT innerhalb der entsprechenden Gruppierung ab. Die äußere Abfrage verknüpft dann dieses Ergebnis mithilfe des Felds „ticket_id“ mit der Haupt-Tickets-Tabelle.
Ein alternativer Ansatz besteht darin, eine verschachtelte Abfrage innerhalb der Haupt-SELECT-Anweisung zu verwenden:
<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>
Dieser Ansatz erfüllt die gleiche Aufgabe, indem er die GROUP_CONCAT-Abfrage in die äußere SELECT-Anweisung einbettet.
Durch die Verwendung einer dieser Änderungen sollte die Abfrage nun korrekt separate Zeilen für jedes Ticket abrufen Zeile mit den Ticketinformationen und den entsprechenden Lösungen für dieses Ticket.
Das obige ist der detaillierte Inhalt vonWie rufe ich separate Zeilen für jedes Ticket mit zugehörigen Lösungen mithilfe von GROUP_CONCAT und LEFT JOIN in MySQL ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!