Mysql
 sql >> Base de données >  >> RDS >> Mysql

Puis-je concaténer plusieurs lignes MySQL dans un seul champ ?

Vous pouvez utiliser GROUP_CONCAT :

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

Comme Ludwig l'a déclaré dans son commentaire, vous pouvez ajouter le DISTINCT opérateur pour éviter les doublons :

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

Comme Jan l'a déclaré dans leur commentaire, vous pouvez également trier les valeurs avant de les imploser en utilisant ORDER BY :

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

Comme Dag l'a indiqué dans son commentaire, il y a une limite de 1024 octets sur le résultat. Pour résoudre ce problème, exécutez cette requête avant votre requête :

SET group_concat_max_len = 2048;

Bien sûr, vous pouvez modifier 2048 selon vos besoins. Pour calculer et attribuer la valeur :

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