Ir para conteúdo

Arquivado

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

joelzsbit

Fazer consulta com saldo acumulado

Recommended Posts

Tenho o seguinte codigo:

$chamada = mysql_query("SELECT * FROM tb_cad_caixa ORDER BY  id");

$cont= 0;

    echo "
     
<form action =\"".$_SERVER['PHP_SELF']."\" method =\"post\" align=\"center\">
    <table align=\"center\"  style=\"font-size:11px; width:750px;\">
        <tr style=\"background:#CCC\">
           <td align=\"center\">Data</td>
           <td align=\"center\">Histórico</td>
           <td align=\"center\">Deb/Cred</td>
           <td align=\"center\">Valor</td>
           <td align=\"center\">Saldo acumulado</td>// esssa coluna nao tenho no banco quero que seja mostrada na consulta...
       </tr>
    ";
                
   // Exibe o resultado da nossa consulta
while($tb_caixa=mysql_fetch_array($chamada))
       
   {    // Zebramos nossa linha da tabela onde pegamos o cont dividimos por 2
           // se o resto for zero mostramos uma cor, se não for mostramos outra
            if ($cont % 2 == 0)
        {
                $cor = "#EEEEEE";
        }
        else
        {
            $cor = "#CCCCCC";
        }
    echo "<tr bgcolor='".$cor."';>";
         echo "<td>".date('d/m/Y', strtotime($tb_caixa['data']))."</td>";
         echo "<td align=left>".$tb_caixa['historico']."</td>";
         echo "<td align=center>".$tb_caixa['deb_cred']."</td>";
         echo "<td align=right>".number_format($tb_caixa['valor'], 2, ',', '.')."</td>";
  echo "<td align=center>". (AQUI ESTA O PROBLEMA QUERIA QUE APARECESSE O SALDO ACUMULADO) ."</td>";

    echo "</tr>" ;


    $cont = $cont + 1;
    
  }
 
  echo "

</table>

</form>

";

Então ali dentro do while na coluna saldo acumulado queria que o while ao percorrer a linha e chegar na coluna deb_cred se encontra-se "C" credito ele somaria o conteudo da coluna valor e se encontrasse "D" debito ele diminuiria...

 

ex.:

 

Bom o que eu quero que me retorne na consulta com um saldo acumulado:
Data |Historico | Deb/Cred| Valor |Saldo acum
31/01 | Credito emprestimo | C | 10,00 | 10,00
31/01 |Pgto de diversos | D | 30,00 |-20,00
31/01 |Credit de aplicaçao | C | 25,00 | 5,00

 

 

se alguem souber desde jah agradeço.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode fazer isso direto na consulta:

SET @saldo=0;
SELECT 
	data,
	historico,
	deb_cred,
	valor,
	@saldo = @saldo + IF(deb_cred='D',valor*-1,valor) as saldo
FROM tb_cad_caixa
ORDER BY  id;

 

 

Ps.: esta sintaxe é para MySQL.

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado hufersil, fiz como vc me passou mas mesmo assim está dando erro: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/rel_caixa_saldo2.php on line 58 --> esta linha é onde esta o while: while($tb_caixa=mysql_fetch_array($chamada))

 

acredito que esse erro é a consulta $chamada que está errado.

 

vou postar o codigo inteiro que estou tentando fazer :

$chamada = mysql_query("SET @saldo=0; SELECT historico, deb_cred, valor, @saldo = @saldo + IF(deb_cred='D',valor*-1,valor) as saldo
FROM tb_cad_caixa ORDER BY id");

	$cont= 0;
	echo "
	<form action =\"".$_SERVER['PHP_SELF']."\" method =\"post\" align=\"center\">
		<table align=\"center\"  style=\"font-size:11px; width:750px;\">
			<tr style=\"background:#CCC\">
				
				<td align=\"left\";>Histórico</td>
				<td align=\"center\";>Deb/Cred</td>
				<td align=\"center\";>Valor</td>
				<td align=\"center\";>Saldo</td>
				
			</tr>"	;
						
		// Exibe o resultado da nossa consulta
		while($tb_caixa=mysql_fetch_array($chamada))
		{	
		  echo "<tr>";
		  echo "<td align=left>".$tb_caixa['historico']."</td>";
		  echo "<td align=center>".$tb_caixa['deb_cred']."</td>";
		  echo "<td align=right>".number_format($tb_caixa['valor'], 2, ',', '.')."</td>";
		  echo "<td align=left>"??????"</td>";
		  echo "</tr>" ;
		$cont = $cont + 1;
		}
			 
		echo "
		</table>
	</form>
	";

 

Notem que na linha echo "<td align=left>"??????"</td>"; onde tem essa interrogação que não sei como colocar o codigo para que ele calcule o saldo a cada linha que o while passar.

 

Se alguem souber como fazer essa consulta e como fazer o echo desta consulta desde já agradeço...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça duas consultas:

 

// inicializando a variavel
mysql_query('SET @saldo=0');

// efetuando a consulta
$result = mysql_query("SELECT 
	data,
	historico,
	deb_cred,
	valor,
	@saldo := @saldo + IF(deb_cred='D',valor*-1,valor) as saldo
FROM tb_cad_caixa
ORDER BY  id");

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal o q consegui o que queria ....

 

Vejam a o codigo:

<form action ="<?php echo $_SERVER['PHP_SELF'] ?>" method ="post" align="center"> 
	<table align="center"  style="font-size:11px; width:750px">
	<tr style="background:#CCC">
		<?php
								/*
	echo "<td align=\"left\";><a href =\"".$_SERVER['PHP_SELF']."?orderby=data\">Data</a></td>";
	echo "<td align=\"left\";><a href =\"".$_SERVER['PHP_SELF']."?orderby=historico\">Histórico</a></td>";
	echo "<td align=\"left\";><a href =\"".$_SERVER['PHP_SELF']."?orderby=deb_cred\">Credito</a></td>";
	echo "<td align=\"left\";><a href =\"".$_SERVER['PHP_SELF']."?orderby=deb_cred\">Debito</a></td>";
	echo "<td align=\"left\";><a href =\"\">Saldo</a></td>";*/
		?>
	<td align="center" style="font-size:12px; font-weight:bold;">Data</td>
	<td align="center" style="font-size:12px; font-weight:bold;">Histórico</td>
	<td align="center" style="font-size:12px; font-weight:bold;">Credito</td>
	<td align="center" style="font-size:12px; font-weight:bold;">Debito</td>
	<td align="center" style="font-size:12px; font-weight:bold;">Saldo</td>
	</tr>
	<?php 
	// Exibe o resultado da nossa consulta
	while($linha1=mysql_fetch_array($chamada)) {
				if ($cont % 2 == 0){
				$cor = "#EEEEEE";
				}
				else{
				$cor = "#CCCCCC";
				}
				?>
	<tr bgcolor="<?php echo $cor; ?>">
	<td><?php echo date('d/m/Y', strtotime($linha1['data']));?> </td>
	<td><?php echo $linha1['historico'];?> </td>
	<td>
<?php 
if($linha1['deb_cred']==C){ 
$credito = $linha1['valor']; 
echo $credito;
}elseif($linha1['deb_cred']==D){ 
echo "---";
$credito = 0;
}
?>
</td>
<td><?php 
if($linha1['deb_cred']==D){ 
$debito = $linha1['valor'];
echo $debito;
}
elseif($linha1['deb_cred']==C){ 
echo "---";
$debito = 0;
}
	?>
	</td>
	<td>
	<?php 
	   $saldo = $saldo + $credito-$debito;
	echo $saldo;
	?>
	</td>
	</tr>
	<?php 
	$cont = $cont + 1;				
	}	
?>
							
						
</table> 
</form>

a saida fica assim:

Data........... Historico .... Credito .. Debito........ Saldo

12/02/12.... entrada....... 100,00..... ------ ........ 100,00

12/02/12.... tarifa ........... --------..... 5,00 .......... 95,00

12/02/12 .... outra tarifa .. ------ ..... 10,00 ........ 85,00

12/02/12 .... entrada....... 8,00 ..... ----- ........ 93,00

 

Lembrando que no banco não tem as colunas Debito e Credito mas apenas uma coluna com o nome de deb_cred onde está cadastrado C e D, que qer dizer credito e Debito.

 

Acredito que o codigo não esteja 100% como deve ser, pois fui juntando daqui e dali e fui montando então não sei se esse é o melhor caminho.... mas pelo menos está funcionando.

 

 

Vlw todos e obrigado pela colaboração.

 

att

Joel

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça duas consultas:

// inicializando a variavel
mysql_query('SET @saldo=0');

// efetuando a consulta
$result = mysql_query("SELECT 
	data,
	historico,
	deb_cred,
	valor,
	@saldo := @saldo + IF(deb_cred='D',valor*-1,valor) as saldo
FROM tb_cad_caixa
ORDER BY  id");

@braços

Buenas de ue forma puedo detectar en la consulta ue el cliente cambia por otro para poner en cero @saldo y comenzar a incrementar nuevamente el mismo.

Saludos

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.