Mysql
 sql >> Database >  >> RDS >> Mysql

Posso concatenare più righe MySQL in un campo?

Puoi utilizzare GROUP_CONCAT :

SELECT person_id,
   GROUP_CONCAT(hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;

Come ha affermato Ludwig in suo commenta, puoi aggiungere il DISTINCT operatore per evitare duplicati:

SELECT person_id,
   GROUP_CONCAT(DISTINCT hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;

Come ha affermato Jan in loro commenta, puoi anche ordinare i valori prima di implodere usando ORDER BY :

SELECT person_id, 
       GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;

Come affermato da Dag in il suo commento, c'è un limite di 1024 byte sul risultato. Per risolvere questo problema, esegui questa query prima della tua query:

SET group_concat_max_len = 2048;

Ovviamente puoi cambiare 2048 secondo le tue esigenze. Per calcolare e assegnare il valore:

SET group_concat_max_len = CAST(
                     (SELECT SUM(LENGTH(hobbies)) + COUNT(*) * LENGTH(', ')
                           FROM peoples_hobbies
                           GROUP BY person_id) AS UNSIGNED);