Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy mogę połączyć wiele wierszy MySQL w jedno pole?

Możesz użyć GROUP_CONCAT :

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

Jak stwierdził Ludwig w jego komentarz, możesz dodać DISTINCT operator, aby uniknąć duplikatów:

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

Jak stwierdził Jan w ich komentarz, możesz także posortować wartości przed implodowaniem za pomocą ORDER BY :

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

Jak stwierdził Dag w jego komentarz, wynik jest ograniczony do 1024 bajtów. Aby rozwiązać ten problem, uruchom to zapytanie przed zapytaniem:

SET group_concat_max_len = 2048;

Oczywiście możesz zmienić 2048 zgodnie z Twoimi potrzebami. Aby obliczyć i przypisać wartość:

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. Jak przekazać parametry do wywołania zwrotnego zapytania mysql w nodejs?

  2. Jak mogę użyć PDO do pobrania tablicy wyników w PHP?

  3. MySQL — spraw, aby istniejące pole było unikalne

  4. Jak uruchomić hosty mysqladmin na Amazon RDS

  5. Porównaj daty w MySQL