Ir para conteúdo

POWERED BY:

Arquivado

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

Leob

[Resolvido] Código com carregamento demorado

Recommended Posts

Boa tarde estou com esse problema. Não sou iniciante no PHP, mas também não sou um usuário avançado então se tiver muita besteira no código desculpem.

 

Eu preciso exibir um relatório onde ele consulta 2 tabelas (Vendas e Despesas_Siscof) e exibir os resultados da seguinte forma:

 

MÊS ENTRADA SAIDA DIFERENÇA

05/2010 R$10 R$5 R$5

 

Ele exibe o mês atual da consulta e os 11 mês anteriores e 11 meses posteriores, porém nas tabelas os resultados estão armazenados por dia então eu tenho que somar todos eles, fechar o mês e exibir o resultado. Meu código está assim:

 

 

<? 
//Recebe Consultas Mes Atual--------
//Dados de Entrada: Mês Atual
$m_atual=date('m/Y');
$sql2="SELECT sum(caixa.cai_valor)FROM venda inner join item on item.ven_id = venda.ven_id inner join caixa on caixa.ite_id = item.ite_id 
where $sede venda.ven_sta='2' and caixa.cai_ref='$m_atual'";
$exec=mysql_query($sql2) or die(atual);
//Dados de Saida
$sai_atual=date('Y-m-01');
$s_atual=date('Y-m-31');
$sql3="SELECT sum(des_vTotal)FROM despesas_siscof where $se des_data between '$sai_atual' and '$s_atual'";
$query=mysql_query($sql3) or die(atual);






//Recebe Consultas Demais Meses------
for($z=1;$z<12;$z++){

//Preenche vetor com meses Anteriores
$anterior[$z]=date("m/Y",mktime(0,0,0,$mes-$z,1,date("Y")));
$a_saida[$z]=date("Y-m-01",mktime(0,0,0,$mes-$z,1,date("Y")));
$a_sai[$z]=date("Y-m-31",mktime(0,0,0,$mes-$z,1,date("Y")));
//Cor da linha 
$a_cor[$z] = ($z % 2) ? '#CCCCFF' : '#FFFFCC';
//Dados de Entrada: Meses Anteriores
$sql[$z]['entrada']="SELECT sum(caixa.cai_valor)FROM venda inner join item on item.ven_id = venda.ven_id inner join caixa on caixa.ite_id = item.ite_id 
where $sede venda.ven_sta='2' and caixa.cai_ref='$anterior[$z]'";
$exe[$z]['entrada']=mysql_query($sql[$z]['entrada']) or die(anterior);
//Dados de Saida Meses Anteriores
$sql[$z]['saida']="SELECT sum(des_vTotal)FROM despesas_siscof where $se des_data between '$a_saida[$z]' and '$a_sai[$z]'";
$exe[$z]['saida']=mysql_query($sql[$z]['saida']) or die(anterior);



//Preenche vetor com meses Posteriores
$posterior[$z]=date("m/Y",mktime(0,0,0,$mes+$z,1,date("Y")));
$p_saida[$z]=date("Y-m-01",mktime(0,0,0,$mes+$z,1,date("Y")));
$p_sai[$z]=date("Y-m-31",mktime(0,0,0,$mes+$z,1,date("Y")));
//Dados de Entrada: Meses Posteriores
$consultar[$z]['entrada']="SELECT sum(caixa.cai_valor)FROM venda inner join item on item.ven_id = venda.ven_id inner join caixa on caixa.ite_id = item.ite_id 
where $sede venda.ven_sta='2' and caixa.cai_ref='$posterior[$z]'";
$executar[$z]['entrada']=mysql_query($consultar[$z]['entrada']) or die(posterior);
//Dados de Saida: Meses Posteriores
$consultar[$z]['saida']="SELECT sum(des_vTotal)FROM despesas_siscof where $se des_data between '$p_saida[$z]' and '$p_sai[$z]'";
$executar[$z]['saida']=mysql_query($consultar[$z]['saida']) or die(anterior);
}





//Imprime Resultados-------
for($y=11;$y>0;$y--){
echo "<tr bgcolor='$a_cor[$y]'>";
echo "<td>$anterior[$y]</td>"; 
$linha=mysql_fetch_row($exe[$y]['entrada']);$val= $linha[0];
$linha2=mysql_fetch_row($exe[$y]['saida']);$val2= $linha2[0]; 
echo "<td>R$ ".number_format($val, 2, ',', '.')."</td>"; 
echo "<td>R$ ".number_format($val2, 2, ',', '.')."</td>";
$v_total=$val-$val2;
echo "<td>R$ ".number_format($v_total, 2, ',', '.')."</td>";
echo "</tr>";
}

echo "<tr bgcolor='#FF9D9D'>";
echo "<td><strong>$m_atual</strong></td>"; 
$linha=mysql_fetch_row($exec);$val= $linha[0];
$linha2=mysql_fetch_row($query);$val= $linha[0];
echo "<td><strong>R$".number_format($val, 2, ',', '.')."</strong></td>"; 
echo "<td><strong>R$ ".number_format($val2, 2, ',', '.')."</strong></td>";
$v_total=$val-$val2;
echo "<td><strong>R$ ".number_format($v_total, 2, ',', '.')."</strong></td>";
echo "</tr>";


for($m=1;$m<12;$m++){
echo "<tr bgcolor='$a_cor[$m]'>";
echo "<td>$posterior[$m]</td>"; 
$linha=mysql_fetch_row($executar[$m]['entrada']);$val= $linha[0];
$linha2=mysql_fetch_row($executar[$m]['saida']);$val2= $linha2[0]; 
echo "<td>R$ ".number_format($val, 2, ',', '.')."</td>"; 
echo "<td>R$ ".number_format($val2, 2, ',', '.')."</td>";
$v_total=$val-$val2;
echo "<td>R$ ".number_format($v_total, 2, ',', '.')."</td>";
echo "</tr>";

 

Só que esse código demora 9 s para ser executado, então gostaria de saber onde estou errando e como posso melhorar esse código. Não sei se consegui ser claro, mas se não fui só falarem que eu explico melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tomara que sua data seja do tipo DATE

 

$mes_ini = date('Y-m-d',strtotime('-11 months',$data_ref));
$mes_fim = date('Y-m-d',strtotime('+11 months',$data_ref));

$query = "SELECT CONCAT('R$ ',SUM(`caixa`.`cai_valor`)) AS `valor`
   FROM `venda`
   INNER JOIN `item` ON `venda`.`ven_id` = `item`.`ven_id`
   INNER JOIN `caixa` ON `item`.`ite_id` = `caixa`.`ite_id`
WHERE `venda`.`ven_sta` = 2 AND
   `caixa`.`cai_ref` BETWEEN ( {$mes_ini} AND {mes_fim} )";

$sql = mysql_query($query) or die(mysql_error());
$rows = array();

while(false !== ($row = mysql_fetch_assoc($sql))) $rows[] = $row;

var_dump($rows);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tipo o problema eh esse monte de SELETCs que você esta fazendo no seu banco... eu tinha um sistema que estava dando esse memso problema, dia ono meu caso eu resolvi fazendo uma unica consulta e jogando os valores tudo em array e fazia as separações dentro da minha array...

 

Não sei se isso se encaixa no eu caso, pois no meu deu certo, mas visando que cada casa eh um caso :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ela é sim, não é tão bagunçado assim hehehe

 

Vou tentar o que você falou!

 

Legal acabei de ver que o cara que fazia o projeto não usou data do tipo Date usou Varchar. Agora Between não vai rolar alguém tem alguma idéia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT sum(caixa.cai_valor), caixa.cai_venc
FROM venda 
inner join item on item.ven_id = venda.ven_id 
inner join caixa on caixa.ite_id = item.ite_id 
where venda.ven_sta='2' 
and str_to_date(cai_venc, '%d/%m/%Y') between '2009-12-01' and '2011-05-31'
group by caixa.cai_ref
order by caixa.cai_venc

Rolou assim. Obrigado por ter falado da conversão como ainda estou aprendendo alguma coisas ainda me atrapalham, pensei em milhares de coisas menos em só converter.

 

Já consegui fazer funcionar valeu pelas dicas

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.