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

Kan jeg sammenkæde flere MySQL-rækker i ét felt?

Du kan bruge GROUP_CONCAT :

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

Som Ludwig sagde i hans kommentar, du kan tilføje DISTINCT operatør for at undgå dubletter:

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

Som Jan sagde i deres kommentar, du kan også sortere værdierne, før du imploderer dem ved at bruge ORDER BY :

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

Som Dag udtalte i hans kommentar, der er en grænse på 1024 byte på resultatet. For at løse dette skal du køre denne forespørgsel før din forespørgsel:

SET group_concat_max_len = 2048;

Selvfølgelig kan du ændre 2048 efter dine behov. For at beregne og tildele værdien:

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


  1. Hvordan indstiller du en standardværdi for en MySQL Datetime-kolonne?

  2. Sådan tilføjes et logo til en formularhoved i Microsoft Access

  3. Hent billede fra databasen i asp.net

  4. Sådan gør du RAND() deterministisk i SQL Server