Możesz użyć GROUP_CONCAT
:
SELECT person_id,
GROUP_CONCAT(hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Jak stwierdził Ludwig w jego komentarz,
możesz dodać DISTINCT
operator, aby uniknąć duplikatów:
SELECT person_id,
GROUP_CONCAT(DISTINCT hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Jak stwierdził Jan w ich komentarz,
możesz także posortować wartości przed implodowaniem za pomocą ORDER BY
:
SELECT person_id,
GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Jak stwierdził Dag w jego komentarz, wynik jest ograniczony do 1024 bajtów. Aby rozwiązać ten problem, uruchom to zapytanie przed zapytaniem:
SET group_concat_max_len = 2048;
Oczywiście możesz zmienić 2048
zgodnie z Twoimi potrzebami. Aby obliczyć i przypisać wartość:
SET group_concat_max_len = CAST(
(SELECT SUM(LENGTH(hobbies)) + COUNT(*) * LENGTH(', ')
FROM peoples_hobbies
GROUP BY person_id) AS UNSIGNED);