Функция GROUP_CONCAT складывает (как строки) содержимое одного поля из разных строк, вставляя между ними разделитель (по умолчанию это запятая).

К примеру, можно получить список всех выбранных имен через запятую или другой разделитель.

Внимание: у этой функции есть ограничение на объем выводимых данных. По умолчанию 1024 символа для каждого объединения - для каждой выводимой строки. Если размер склеенных данных больше, то он будет урезаться.

Чтобы расширить размер нужно выполнить команду SET group_concat_max_len = 4096;

Если у вас есть привилегии, то вы расширите объем получаемых данных до 4096, можно и больше. Но чаще всего на обычных хостингах таких привилегий нет.

См. также команду GROUP BY, с помощью которой можно группировать строки для использования GROUP_CONCAT.

См. также функции CONCAT и CONCAT_WS которые складывают колонки одной строки.

Синтаксис

Без указания разделителя (по умолчанию это будет запятая):

SELECT GROUP_CONCAT(поле) FROM имя_таблицы WHERE условие

С указанием разделителя:

SELECT GROUP_CONCAT(поле SEPARATOR разделитель) FROM имя_таблицы WHERE условие

Примеры

Все примеры будут по этой таблице workers, если не сказано иное:

id
айди
name
имя
age
возраст
1 Дима 23
2 Петя 23
3 Вася 23
4 Коля 24
5 Иван 24
6 Кирилл 25

Пример

В данном примере запрос находит все имена в таблицы и выводит их через запятую:

SELECT GROUP_CONCAT(name) as name FROM workers

SQL запрос выберет следующие строки:

name
имена
Дима,Петя,Вася,Коля,Иван,Кирилл

Пример

В данном примере разделитель меняется на '+' с помощью команды SEPARATOR:

SELECT GROUP_CONCAT(name SEPARATOR '+') as name FROM workers

SQL запрос выберет следующие строки:

name
имена
Дима+Петя+Вася+Коля+Иван+Кирилл

Пример

В данном примере с помощью команды WHERE выбираются не все строки, а заданные:

SELECT GROUP_CONCAT(name) as name FROM workers WHERE id>=3 AND id<=5

SQL запрос выберет следующие строки:

name
имена
Вася,Коля,Иван

Пример

В данном примере с помощью команды GROUP BY строки группируются по возрасту и для каждой группы через запятую выводятся имена работников с таким возрастом:

SELECT age, GROUP_CONCAT(name) as name FROM workers GROUP BY age

SQL запрос выберет следующие строки:

age
возраст
name
имена
23 Дима,Петя,Вася
24 Коля,Иван
25 Кирилл

Пример

Поменяем разделитель на '-':

SELECT age, GROUP_CONCAT(name SEPARATOR '-') as name FROM workers GROUP BY age

SQL запрос выберет следующие строки:

age
возраст
name
имена
23 Дима-Петя-Вася
24 Коля-Иван
25 Кирилл