MySQL: CONCAT über mehrere Zeilen
Frage von Gast | 23.09.2014 um 20:19
Ich würde gerne das Ergebnis aus mehreren Feldern zusammengefasst aus einer Datenbank auslesen.
Wenn diese Felder innerhalb von einer Zeile in der Tabelle vorliegen, ist dies kein Problem und man kann CONCAT benutzen. Also zum Beispiel folgende Abfrage um Vorname und Nachname einer Person zusammen auszulesen:
SELECT CONCAT(firstname, ' ', lastname) AS fullname FROM users WHERE id = 1
Obwohl "firstname" und "lastname" zwei unterschiedliche Felder in der Datenbank sind, werden sie als ein gemeinsames Feld "fullname" im Ergebnis angezeigt.
Nun möchte ich aber über mehrere Zeilen hinweg ein CONCAT durchführen, also das Ergebnis aus mehreren Feldern untereinander zusammenfassen.
Zum Beispiel könnte man jedem Nutzer mehrere Eigenschaften zuordnen, diese stehen in der Tabelle "props", für jeden Nutzer und jede Eigenschaft eine gesonderte Zeile. Um die Eigenschaften auszulesen, würde man folgende Abfrage machen:
SELECT prop FROM props WHERE user_id = 1
Das Ergebnis einer solchen Abfrage könnte zum Beispiel so aussehen (in drei Ergebnis-Zeilen):
A B C
Ich hätte aber lieber als Ergebnis folgende Anordnung in nur einem Ergebnis-Feld:
A, B, C
Gibt es da irgendeine Möglichkeit in MySQL ein solches Ergebnis zu bekommen?
Ähnliche Themen
Text nur in bestimmten Zeilen ersetzen
Tutorial | 0 Kommentare
MySQL: Zeilenumbrüche in MySQL
Tipp | 0 Kommentare
Mehrere Texte gleichzeitig ersetzen
Tutorial | 0 Kommentare
Leerzeichen vom Beginn und Ende der Zeilen eines Textes entfernen
Tutorial | 0 Kommentare
Delphi: CanvasTextOut Ausrichtung: Align Left, Right and Center
Tipp | 0 Kommentare
MySQL: Werte aus zwei Spalten auslesen und in einer Variable ausgeben
Tipp | 0 Kommentare
MySQL: Minimale Wortlänge bei der Volltextsuche ändern
Tipp | 1 Kommentar
Wichtiger Hinweis
Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.
Jetzt mitmachen
Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.
Schau dir einmal GROUP_CONCAT an. Damit sollte genau das möglich sein, was du suchst.
So bekommst du ein Ergebnis in der Form "A,B,C":
Möchtest du den Separator selber bestimmen, kannst du einen String hinter SEPARATOR angeben:
Falls du das Ergebnis sortieren möchtest kannst du ORDER BY <Spalte> ASC oder DESC benutzen:
Doppelte Werte eliminierst du mit DISTINCT:
Falls du mehrere Nutzer gleichzeitig auslesen möchtest, kannst du mit GROUP BY arbeiten:
Wichtig, wenn lange Ergebnisse erwartbar sind: MySQL kennt die Variable group_concat_max_len, die meistens auf 1024 Byte steht und das Ergebnis eines GROUP_CONCAT-Feldes begrenzt. Kommst du über diesen Wert hinaus, würde das Ergebnis abgeschnitten. In den MySQL-Einstellungen und über "SET group_concat_max_len = NEUERWERT" kannst du den Wert deinen Bedürfnissen entsprechend anpassen.
24.09.2014 um 17:10