Kann ich mehrere MySQL-Zeilen in ein Feld verketten?
Mit MySQL
kann ich etwas tun wie:
SELECT hobbies FROM peoples_hobbies WHERE person_id = 5;
Meine Ausgabe:
shopping
fishing
coding
aber stattdessen möchte ich nur 1 Zeile, 1 Spalte:
Erwartete Ausgabe:
shopping, fishing, coding
Der Grund dafür ist, dass ich mehrere Werte aus mehreren Tabellen auswähle, und nach all den Joins habe ich viel mehr Zeilen als ich möchte.
Ich habe auf MySQL Doc nach einer Funktion gesucht und es sieht nicht so aus, als ob die Funktionen CONCAT
oder CONCAT_WS
Ergebnismengen akzeptieren, weiß also jemand hier, wie man das macht?
1135
3
Sie können
GROUP_CONCAT
verwenden:Wie Ludwig in seinem Kommentar, erwähnt, können Sie den Operator
DISTINCT
hinzufügen, um Duplikate zu vermeiden:Wie Jan in seinem Kommentar erklärte, können Sie die Werte auch vor dem Implodieren mit
ORDER BY
sortieren:Wie Dag in seinem Kommentar erklärte, ist das Ergebnis auf 1024 Byte begrenzt. Um dies zu lösen, führen Sie diese Abfrage vor Ihrer Abfrage aus:
Natürlich können Sie
2048
nach Ihren Bedürfnissen ändern. Um den Wert zu berechnen und zuzuweisen:Werfen Sie einen Blick auf
GROUP_CONCAT
, wenn Ihre MySQL-Version (4.1) dies unterstützt. Siehe die Dokumentation für weitere Details.Es würde in etwa so aussehen:
Es gibt eine Funktion GROUP Aggregate, GROUP_CONCAT.