Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Kann ich mehrere MySQL-Zeilen zu einem Feld verketten?

Sie können GROUP_CONCAT :

SELECT person_id,
   GROUP_CONCAT(hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;

Wie Ludwig in beschrieben hat Kommentar, Sie können den DISTINCT hinzufügen Operator zur Vermeidung von Duplikaten:

SELECT person_id,
   GROUP_CONCAT(DISTINCT hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;

Wie Jan in ihre Kommentar, Sie können die Werte auch sortieren, bevor Sie sie mit ORDER BY implodieren :

SELECT person_id, 
       GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;

Wie Dag in sein Kommentar, Das Ergebnis ist auf 1024 Byte begrenzt. Um dies zu lösen, führen Sie diese Abfrage vor Ihrer Abfrage aus:

SET group_concat_max_len = 2048;

Natürlich können Sie 2048 ändern nach Ihren Bedürfnissen. Um den Wert zu berechnen und zuzuweisen:

SET group_concat_max_len = CAST(
                     (SELECT SUM(LENGTH(hobbies)) + COUNT(*) * LENGTH(', ')
                           FROM peoples_hobbies
                           GROUP BY person_id) AS UNSIGNED);