MySQL-Unterabfragen und durch Kommas getrennte Listen: Ein praktischer Leitfaden
Das Arbeiten mit mehreren MySQL-Tabellen erfordert häufig Unterabfragen. Allerdings kann es schwierig sein, durch Kommas getrennte Listen aus Unterabfrageergebnissen zu erstellen. Dieser Leitfaden zeigt eine Lösung mit GROUP_CONCAT
.
Die Herausforderung:
Stellen Sie sich dieses Szenario vor: Sie benötigen eine Abfrage, die Veröffentlichungs-IDs, Namen und eine durch Kommas getrennte Liste der zugehörigen Site-Namen abruft. Ein naiver Ansatz mit einer Unterabfrage könnte so aussehen:
<code class="language-sql">SELECT p.id, p.name, (SELECT name FROM sites s WHERE s.id = p.site_id) AS site_list FROM publications p;</code>
Dies erzeugt keine durch Kommas getrennte Zeichenfolge; Stattdessen wird pro Zeile ein einzelner Site-Name zurückgegeben.
Die Lösung mit GROUP_CONCAT
:
Die GROUP_CONCAT
-Funktion von MySQL ist der Schlüssel zum Erstellen kommagetrennter Listen. Hier ist die verbesserte Abfrage:
<code class="language-sql">SELECT p.id, p.name, GROUP_CONCAT(s.name) AS site_list FROM sites s INNER JOIN publications p ON s.id = p.site_id GROUP BY p.id, p.name;</code>
Wie es funktioniert:
INNER JOIN
: Dadurch werden die Tabellen publications
und sites
effizient verknüpft, basierend auf übereinstimmenden site_id
. Es werden nur Veröffentlichungen mit entsprechenden Websites berücksichtigt.GROUP_CONCAT(s.name)
: Diese Funktion verkettet alle s.name
-Werte (Site-Namen) für jede Veröffentlichungs-ID in einer einzigen durch Kommas getrennten Zeichenfolge, die in der Spalte site_list
gespeichert wird.GROUP BY p.id, p.name
: Dadurch werden die Ergebnisse nach Veröffentlichungs-ID und Name gruppiert, um sicherzustellen, dass GROUP_CONCAT
für jede Veröffentlichung korrekt funktioniert.Diese überarbeitete Abfrage liefert die gewünschte Ausgabe: Veröffentlichungs-ID, Name und eine sauber formatierte, durch Kommas getrennte Liste der zugehörigen Site-Namen.
Das obige ist der detaillierte Inhalt vonWie extrahiere ich effizient durch Kommas getrennte Listen aus MySQL-Unterabfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!