Функция 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 | Кирилл |