quarta-feira, 23 de março de 2011

Comando GROUP_CONCAT do MYSQL

Imagine a seguinte situação: você precisa criar um filtro para usar como  base em uma consulta SQL em uma tabela e esse filtro deve ser gerado com base em uma consulta anterior realizada em outra tabela gerando um filtro com o comando IN contendo as chaves-primárias da primeira tabela. Muitas pessoas usariam um while que executaria enquanto fossem encontrados registros na primeira consulta concatenando os códigos das chaves-primárias em uma string. Mas existe uma outra forma de se fazer o mesmo trabalho sem depender de strings de texto. Basta usar o comando GROUP_CONCAT do MYSQL. A sintaxe da SQL ficaria desta forma: SELECT GROUP_CONCAT(CAST(coluna AS CHAR(10))) FROM TABELA WHERE ...
Essa consulta retorna uma string (com os códigos concatenados e separados por vírgula ) pronta para ser colocada dentro do comando IN(...). O comando CAST é necessário porque GROUP_CONCAT não trabalha com valores inteiros. O tamanho do tipo CHAR pode ser ajustado de acordo com o tamanho da chave estrangeira, nesse caso um valor INT de tamanho 10.