Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Posso concatenar várias linhas do MySQL em um campo?


Você pode usar GROUP_CONCAT :
SELECT person_id,
   GROUP_CONCAT(hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;

Como Ludwig afirmou em sua comentar, você pode adicionar o DISTINCT operador para evitar duplicatas:
SELECT person_id,
   GROUP_CONCAT(DISTINCT hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;

Como Jan declarou em sua comentar, você também pode classificar os valores antes de implodir usando ORDER BY :
SELECT person_id, 
       GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;

Como Dag afirmou em o comentário dele, há um limite de 1024 bytes no resultado. Para resolver isso, execute esta consulta antes de sua consulta:
SET group_concat_max_len = 2048;

Claro, você pode alterar 2048 de acordo com suas necessidades. Para calcular e atribuir o valor:
SET group_concat_max_len = CAST(
                     (SELECT SUM(LENGTH(hobbies)) + COUNT(*) * LENGTH(', ')
                           FROM peoples_hobbies
                           GROUP BY person_id) AS UNSIGNED);