Concatenando resultados com o group_concat() no MySql
Desde “criança” ouço dizer que processamento de banco de dados costuma ser mais rápido (mesmo que invísivel diferença a olho nu) que das linguagens server-side que o manipulam (asp, php, etc.), então me habituei a realizar o máximo de processamento de dados no banco.
Hoje eu estava criando um método num sistema, que envia email para uma grande lista, então decidi que o MySql já devia retornar todos emails numa única row, separados por vírgulas, pra isso usei o group_concat().
1º Exemplo:
1 2 | SELECT group_concat( email ) AS lista FROM usuarios |
Este exemplo vai retornar todos os resultados na row lista, separados por vírgula.
lista |
---|
email1@gmail.com, email2@gmail.com, email3@gmail.com |
2º Exemplo:
1 2 | SELECT nivel, group_concat(email) AS lista FROM usuarios GROUP BY nivel |
Esse exemplo tem uma melhor utilidade dessa função. Você poder concatenar resultados por grupos diferentes.
Não é necessário muita explicação, basta ver o resultado: estão agrupados por nível hierárquico (campo nivel) os emails dos usuários do sistema.
nivel | lista |
---|---|
gerentes | gerente1@email.com, gerente2@email.com |
supervisores | joe@email.com, marcelo@email.com, johndoe@email.com |
clientes | cliente001@email.com, cliente002@email.com |
Fica bem melhor trabalhar dessa forma, do que usar vários loops com vários ifs.