sql >> Databáze >  >> RDS >> Mysql

Mohu zřetězit více řádků MySQL do jednoho pole?

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);


  1. funkce velkého celého čísla

  2. Instalace SQL Server Failover Cluster -2

  3. Jak vyberete každý n-tý řádek z mysql

  4. Jak odstranit úvodní a koncové mezery v poli MySQL?