Conexão de tabelas temporárias com PHP + MySQL

Publicado por Ariel Galante Dalla Costa em 19/12/2011

[ Hits: 14.861 ]

Blog: http://arielgdc.wordpress.com

 


Conexão de tabelas temporárias com PHP + MySQL



Para os desenvolvedores, tabelas temporárias são uma "mão-na-roda" quando precisa-se manipular os mesmos dados e mesma consulta várias vezes, principalmente em relatórios.

Só que há um problema: quando utiliza-se uma conexão orientada a objeto, por exemplo no PHP, que finalize a conexão ao banco de dados, não há como executar várias consultas e retirar os dados.

Por exemplo: criando a tabela de usuários, vamos extrair os dados contidos nela.

Criando e inserindo dados no banco de dados

CREATE TABLE USUARIOS(    CODIGO INTEGER NOT NULL,    NOME VARCHAR(100) NOT NULL,    USUARIO VARCHAR(30) NOT NULL,    SENHA VARCHAR(128) NOT NULL ); INSERT INTO USUARIOS() VALUES(1,'ARIEL','arieldll','anstds1120'); INSERT INTO USUARIOS() VALUES(2,'ALBERTO','aalt','1103858awp'); INSERT INTO USUARIOS() VALUES(3,'THAIS','thbp','widhxx945j'); ---INÍCIO-DO-SQL-TEMPORARIO-PARA-RODAR-NO-BANCO--- DROP TABLE IF EXISTS TMP_TODOS_USUARIOS; CREATE TEMPORARY TABLE TMP_TODOS_USUARIOS AS(    SELECT       *    FROM       USUARIOS ); DROP TABLE IF EXISTS TMP_USUARIOS_2; CREATE TEMPORARY TABLE TMP_USUARIOS_2 AS(    SELECT       *    FROM       TODOS_USUARIOS    WHERE       USUARIO like '%a%'; ); DROP TABLE IF EXISTS TMP_USUARIOS_3; CREATE TEMPORARY TABLE TMP_USUARIOS_3 AS(    SELECT       *    FROM       TODOS_USUARIOS    WHERE       SENHA like '%1%'; ); SELECT    TMP_USUARIOS_3 UNION    TMP_USUARIOS_2; -----FIM-DO-SQL-TEMPORARIO-PARA-RODAR-NO-BANCO----


Função para enviar/separar/receber dados

Bom, caso tenta-se rodar este 'sql' em uma conexão que depois executa o 'mysql_close()', acabará por não manter a tabela temporária, pois ela será excluída automaticamente pelo banco quando a conexão cair.

Mas, para resolver este pequeno problema, desenvolvi uma função simples que ajudará:

<?php    $Con_local;    function Busca_separa_query($Query){       global $Con_local; //DEFINE A VARIÁVEL $Con_local como do escopo global       $Consultas=explode(";", $Query); //DIVIDE AS CONSULTAS (GERA UM VETOR) APARTIR DE ; (PONTO-E-VÍRGULA)       $Con_local=mysql_connect('Endereco_banco','usuario','senha'); //CONECTA AO BANCO DE DADOS       mysql_select_db('Nome_da_base_de_dados', $Con_local); //SELECIONA A BASE DE DADOS A SER UTILIZADA       for($Conta=1; $Conta<=count($Consultas); $Conta++){ //A FUNÇÃO count() CONTA QUANTAS POSIÇÕES EXISTE NO VETOR, ENTÃO, VOCÊ PODE RESOLVÊ-LA COM VÁRIAS OUTRAS FORMAS               $rs_l=mysql_query($Consul tas[$Conta-1], $Con_local); //EXECUTA A CONSULTA NO BANCO, RETORNANDO A ÚLTIMA CONSULTA EXECUTADA.       }       return $rs_l;    } ?>


Para utilizar a função, basta recebê-la em um variável, como por exemplo:

<?php    $resultado_usuarios=Busca_separa_query("DROP TABLE IF EXISTS TMP_TODOS_USUARIOS;                    CREATE TEMPORARY TABLE TMP_TODOS_USUARIOS AS(                       SELECT                          *                       FROM                          USUARIOS                    );                    DROP TABLE IF EXISTS TMP_USUARIOS_2;                    CREATE TEMPORARY TABLE TMP_USUARIOS_2 AS(                       SELECT                          *                       FROM                          TODOS_USUARIOS                       WHERE                          USUARIO like '%a%';                    );                    DROP TABLE IF EXISTS TMP_USUARIOS_3;                    CREATE TEMPORARY TABLE TMP_USUARIOS_3 AS(                       SELECT                          *                       FROM                          TODOS_USUARIOS                       WHERE                          SENHA like '%1%';                    );                    SELECT                       TMP_USUARIOS_3                    UNION                       TMP_USUARIOS_2;"); if(mysql_num_rows($resultado_usuarios)>0){       while($resultado=mysql_fetch_array($resultado_usuarios))){          echo 'Codigo: '.resultado["CODIGO"].'<br>';          echo 'Usuario: '.resultado["USUARIO"].'<br>';          echo 'Senha: '.resultado["SENHA"].'<br>';       }    }


Fechando a conexão e saindo

Agora, para fechar a conexão, basta simplesmente gerar outra conexão ou fechar manualmente cada vez.

<?php    mysql_close($Con_local); ?>


Ou:

<?php    function Fechar_temps(){       global $Con_local;       mysql_close($Con_local);    }    //E CHAMÁ-LA    Fechar_temps();    ?>


Para outras bases de dados, pode-se também implementar, como por exemplo no PostGRES.

Caso necessite, pode implementá-la de várias maneiras. Ou, se tiver outra sugestão, estarei feliz por compartilhar ela conosco.

Espero que isso ajude vários.

[]'s Ariel

Outras dicas deste autor

Exemplo de conexão ao banco de dados orientada a objeto em PHP+MySQL

Ubuntu e Fedora - Mudando o brilho da tela de notebooks Itautec w7635 e w7655

Leitura recomendada

Configurar mouse USB com rodinha (wheel mouse USB)

Insigne Linux 2.0

Instalar Firefox com plugin Flash Player no Debian Squeeze

Proxy paralelo MikroTik com ZPH

Intermitência na tela do Kubuntu 8.10 Linux

  

Comentários
[1] Comentário enviado por chroda em 26/12/2011 - 17:48h

Nunca apliquei tabela temporário, uso mysql e mongodb nos meus projetos, mas achei interessante, e vou estudar mais a fundo o caso, agradeço o compartilhamento.

[2] Comentário enviado por arieldll em 26/12/2011 - 17:53h

Tabelas temporarias sao muito interessantes para o desenvolvimendo de relatorios, por exemplo. Se voce precisa buscar duas vezes os mesmos dados, basta criar uma tabela temporaria e chama-los uma vez somente.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts