Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie verwende ich GROUP_CONCAT mit LEFT JOIN in MySQL korrekt, um Lösungen pro Ticket zu verketten?

Barbara Streisand
Freigeben: 2024-10-27 10:35:03
Original
541 Leute haben es durchsucht

How to Correctly Use GROUP_CONCAT with LEFT JOIN in MySQL to Concatenate Solutions per Ticket?

Problem und Lösung von MySQL GROUP_CONCAT mit LEFT JOIN

In MySQL wird die Funktion GROUP_CONCAT häufig zum Verketten von Zeichenfolgen aus mehreren Zeilen in einer Gruppe verwendet . Wenn Sie diese Funktion jedoch mit einem LEFT JOIN verwenden, kann es vorkommen, dass mehrere Zeilen zu einer einzigen Zeile zusammengefasst werden, anstatt getrennt zu werden.

Problembeschreibung

Stellen Sie sich das folgende Szenario vor:

  • Zwei Tabellen, „Tickets“ und „Lösungen“, die eine Helpdesk-Datenbank darstellen
  • Jedes Ticket hat eine oder mehrere entsprechende Lösungen
  • Ziel: Erstellen Sie eine Abfrage, die alle Lösungen für jedes Ticket kombiniert

Die verwendete Abfrage:

<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>
Nach dem Login kopieren

Problem

Dies Die Abfrage gibt nur eine Zeile zurück, wobei die Informationen von Ticket 1 und die Lösungseinträge von Ticket 1 und Ticket 2 miteinander verkettet sind.

Lösung

Um dieses Problem zu beheben, verwenden Sie eine Unterabfrage oder abgeleitete Tabelle innerhalb der JOIN-Anweisung, um die Lösungen nach Ticket-ID zu gruppieren:

Lösung 1: Unterabfrage verwenden

<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>
Nach dem Login kopieren

Lösung 2: Abgeleitete Tabelle verwenden

<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>
Nach dem Login kopieren

Durch die Gruppierung der Lösungen vor dem Zusammenführen gibt die Abfrage jetzt separate Zeilen für jedes Ticket zurück, wobei die entsprechenden Lösungen in einer einzigen Zeichenfolge verkettet sind.

Das obige ist der detaillierte Inhalt vonWie verwende ich GROUP_CONCAT mit LEFT JOIN in MySQL korrekt, um Lösungen pro Ticket zu verketten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!