Mysql
 sql >> база данни >  >> RDS >> Mysql

Мога ли да обединя множество MySQL редове в едно поле?

Можете да използвате GROUP_CONCAT :

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

Както Лудвиг заяви в hi коментар, можете да добавите DISTINCT оператор за избягване на дублиране:

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

Както Ян заяви в тяхното коментар, можете също да сортирате стойностите, преди да ги имплодирате, като използвате ORDER BY :

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

Както Даг заяви в негов коментар, има ограничение от 1024 байта за резултата. За да разрешите това, изпълнете тази заявка преди заявката си:

SET group_concat_max_len = 2048;

Разбира се, можете да промените 2048 според вашите нужди. За да изчислите и присвоите стойността:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. разделяне на ключови думи за post php mysql

  2. PHP да съхранява изображения в MySQL или не?

  3. Възстановете базата данни на mysql от .frm файлове

  4. Изберете колони в различни бази данни

  5. MySQL неправилен ключов файл за таблицата tmp при извършване на множество обединения