Můžete použít GROUP_CONCAT
:
SELECT person_id,
GROUP_CONCAT(hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Jak uvedl Ludwig ve svém jeho komentář,
můžete přidat DISTINCT
operátor, aby se zabránilo duplicitám:
SELECT person_id,
GROUP_CONCAT(DISTINCT hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Jak Jan uvedl v jejich komentář,
můžete také seřadit hodnoty před implodováním pomocí ORDER BY
:
SELECT person_id,
GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Jak uvedl Dag v jeho komentář na výsledek je limit 1024 bajtů. Chcete-li to vyřešit, spusťte tento dotaz před dotazem:
SET group_concat_max_len = 2048;
2048
samozřejmě můžete změnit podle vašich potřeb. Pro výpočet a přiřazení hodnoty:
SET group_concat_max_len = CAST(
(SELECT SUM(LENGTH(hobbies)) + COUNT(*) * LENGTH(', ')
FROM peoples_hobbies
GROUP BY person_id) AS UNSIGNED);