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