Du kan bruge GROUP_CONCAT
:
SELECT person_id,
GROUP_CONCAT(hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Som Ludwig sagde i hans kommentar,
du kan tilføje DISTINCT
operatør for at undgå dubletter:
SELECT person_id,
GROUP_CONCAT(DISTINCT hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Som Jan sagde i deres kommentar,
du kan også sortere værdierne, før du imploderer dem ved at bruge ORDER BY
:
SELECT person_id,
GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Som Dag udtalte i hans kommentar, der er en grænse på 1024 byte på resultatet. For at løse dette skal du køre denne forespørgsel før din forespørgsel:
SET group_concat_max_len = 2048;
Selvfølgelig kan du ændre 2048
efter dine behov. For at beregne og tildele værdien:
SET group_concat_max_len = CAST(
(SELECT SUM(LENGTH(hobbies)) + COUNT(*) * LENGTH(', ')
FROM peoples_hobbies
GROUP BY person_id) AS UNSIGNED);