Leob 0 Denunciar post Postado Junho 11, 2010 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
Evandro Oliveira 331 Denunciar post Postado Junho 11, 2010 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
wolfphw 60 Denunciar post Postado Junho 11, 2010 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
Leob 0 Denunciar post Postado Junho 14, 2010 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
Evandro Oliveira 331 Denunciar post Postado Junho 14, 2010 Conversão, ué. Compartilhar este post Link para o post Compartilhar em outros sites
Leob 0 Denunciar post Postado Junho 14, 2010 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