Bạn có thể sử dụng GROUP_CONCAT
:
SELECT person_id,
GROUP_CONCAT(hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Như Ludwig đã nêu trong của anh ấy bình luận,
bạn có thể thêm DISTINCT
toán tử để tránh trùng lặp:
SELECT person_id,
GROUP_CONCAT(DISTINCT hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Như Jan đã nêu trong của họ bình luận,
bạn cũng có thể sắp xếp các giá trị trước khi mã hóa nó bằng cách sử dụng ORDER BY
:
SELECT person_id,
GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Như Dag đã nêu trong nhận xét của anh ấy, có giới hạn 1024 byte trên kết quả. Để giải quyết vấn đề này, hãy chạy truy vấn này trước truy vấn của bạn:
SET group_concat_max_len = 2048;
Tất nhiên, bạn có thể thay đổi 2048
theo nhu cầu của bạn. Để tính toán và gán giá trị:
SET group_concat_max_len = CAST(
(SELECT SUM(LENGTH(hobbies)) + COUNT(*) * LENGTH(', ')
FROM peoples_hobbies
GROUP BY person_id) AS UNSIGNED);