Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ericsson Berg

montar <td></td> com variável do banco em tempo de exe

Recommended Posts

Tenho um select na primeira tabela que tem alguns campos montados em tempo de execução por outro select acima:

While do banco....{
$tipo_dados .= ",
      SUM(CASE WHEN OS.TIPO = '".$MAPA['TIPO']."' THEN 1 ELSE 0 END) QTDE_".$MAPA['TIPO'].", 
      SUM(CASE WHEN OS.TIPO = '".$MAPA['TIPO']."' THEN (OS.VALOR_ITENS_BRUTO-OS.DESCONTOS_ITENS) + (OS.VALOR_SERVICOS_BRUTO-OS.DESCONTOS_SERVICOS) ELSE 0 END) VLR_LIQ_".$MAPA['TIPO'];
}

Este código popula o select em questão

      $sql2 = "SELECT DISTINCT ORDEM.COD_EMPRESA COD_EMPRESA, 
                EMPRESAS.NOME EMPRESA "; 
         $sql2 .= $tipo_os."

            FROM ".$schema.".ORDEM, 
                 ".$schema.".EMPRESAS
                    
            WHERE  EMPRESAS.COD_EMPRESA = ORDEM.COD_EMPRESA
                   AND TRUNC(ORDEM.DATA_ENCERRADA) >= TO_DATE('2016/01/01','YYYY/MM/DD') 
                   AND TRUNC(ORDEM.DATA_ENCERRADA) <= TO_DATE('2016/01/31','YYYY/MM/DD')
                   AND ORDEM.STATUS_ORDEM= '1'  

            GROUP BY ORDEM.COD_EMPRESA, EMPRESAS.NOME
            ORDER BY EMPRESAS.NOME"; 

Até ai blz, mas preciso imprimir os dados gerados acima numa tabela.

    while ($MAPA2 = oci_fetch_array($statement2, OCI_ASSOC)){  

       $query_os .= <td>".$MAPA2['QTDE_tipo']."</td>                            
                      <td>".$MAPA2['VALOR_LIQUIDO_tipo']."</td>
                    "; */; 
        
    } 

Então, não sei como fazer para imprimir os <td> com os campos da tabela sem saber quantos serão, e quais nomes o alias terá, visto que em períodos diferentes podem mudar os dados pesquisados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvi assim:

 $num = 0;  
    while ($MAPA = oci_fetch_array($statement1, OCI_ASSOC)){   
        
   $query_os .= " <th width='30'>QTDE</th>
                     <th width='80'>VLR ".$MAPA['TIPO']."</th>";
     $tipo_os .= ",
      SUM(CASE WHEN OS.TIPO = '".$MAPA['TIPO']."' THEN 1 ELSE 0 END) QTDE_".$num.", 
      SUM(CASE WHEN OS.TIPO = '".$MAPA['TIPO']."' THEN (OS.VALOR_ITENS_BRUTO-OS.DESCONTOS_ITENS) + (OS.VALOR_SERVICOS_BRUTO-OS.DESCONTOS_SERVICOS) ELSE 0 END) VLR_LIQ_".$num." ";

     $num += 1;
}

Nomeei o alias com QTDE_$num. Um contador.

     $num_campos = (int) oci_num_fields($statement2);
     
    while ($MAPA2 = oci_fetch_array($statement2, OCI_ASSOC)){        
 
        for ($i=0; $i < (($num_campos - 2)/2); $i++){
         $query_os .= " <td>".$MAPA2['QTDE_'.$i]."</td>                            
                        <td>".$MAPA2['VLR_LIQ_'.$i]."</td> 

                      "; /*(string)$query_os2; /*"*/
       
        }
      
    } 

E para o select que monta o <td> peguei o número de colunas que o select traz, diminui 2 do total que são os campos cod e empresa, os quais não utilizo pois servem somente para o Group by, e dividi por 2 pq os campos qtde e vlr_liq são os códigos de start para impressão da consulta.

 

Bom provavemente não é a melhor forma, mas resolveu.

 

Se alguém tiver um jeito melhor, gostaria que postasse para que me ajude a ampliar os meus conhecimentos.

 

Vlw.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.