Puoi utilizzare GROUP_CONCAT
:
SELECT person_id,
GROUP_CONCAT(hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Come ha affermato Ludwig in suo commenta,
puoi aggiungere il DISTINCT
operatore per evitare duplicati:
SELECT person_id,
GROUP_CONCAT(DISTINCT hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Come ha affermato Jan in loro commenta,
puoi anche ordinare i valori prima di implodere usando ORDER BY
:
SELECT person_id,
GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Come affermato da Dag in il suo commento, c'è un limite di 1024 byte sul risultato. Per risolvere questo problema, esegui questa query prima della tua query:
SET group_concat_max_len = 2048;
Ovviamente puoi cambiare 2048
secondo le tue esigenze. Per calcolare e assegnare il valore:
SET group_concat_max_len = CAST(
(SELECT SUM(LENGTH(hobbies)) + COUNT(*) * LENGTH(', ')
FROM peoples_hobbies
GROUP BY person_id) AS UNSIGNED);