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);