Ir para conteúdo

POWERED BY:

Arquivado

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

Fabio Henrique Rangel

Tabela Dinâmica Com Cálculos

Recommended Posts

Ola Pessoal

Preciso de Uma ajudinha de Voces

 

Tenho esse código a Baixo

<?
$sql = "SELECT * FROM lc_movimento where dia='$dia' AND mes='$mes' AND ano='$ano'AND tipo='$tipo'";
$resultado = mysql_query($sql) or die ("Erro na consulta pacientes");
while ($linha = mysql_fetch_assoc($resultado)){

$id = $linha["id"];
$dia1 = $linha["dia"];
$mes1 = $linha["mes"];
$ano1 = $linha["ano"];
$cat1 = $linha["cat"];
$descricao = $linha["descricao"];
$valor1 = $linha["valor"];

?>  
   
<tr valign="baseline">
<td bgcolor="#CCCCCC"><div align="center" class="style4 style10">1</div></td>
<td bgcolor="#CCCCCC"><div align="center" class="style7 style10">Dia<? echo $dia1 ?></div></td>
<td bgcolor="#CCCCCC"><div align="center" class="style7 style10"><? echo $descricao ?></div></td>
<td bgcolor="#CCCCCC"><div align="center" class="style7 style10">R$<? echo $valor1 ?></div></td><</tr>

E Preciso Que ao final de cada conjuntos de Dia me apareça uma linha amarela ao para colocar os Resultados

 

Dia Nome

1

1

1

echo Linha Amarela

23

23

echo Linha Amarela

 

Como nessa imagem a Baixotable.png

Desde já Agradeço a Todos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Amigo eu to quebrando a cabeça aqui tentei fazer mais não consegui. quanto aos calculos eu resolvo. o problema e fazer com que a apareça alinha amarela ao final de cada conjunto de dias

 

 

Alguem teria alguma ideia?

 

 

Que possa me ajudar

 

Ola Amigos

 

Alaguem tem Alguma Ideia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

É so fazer a comparação de duas variáveis, em uma você armazena o dia

se elas forrem igual ou a segunda for nula aparece a linha bege,

se elas forem diferentes você mostra a linha amarela e depois a bege

e no final você faz a ultima ter o valor da primeira,

assim para comparar quando o loop voltar ao inicio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você poderia fazer de várias formas. Eu proponho uma das duas a seguir:

  • agrupar os lançamentos por data em um array associativo;
  • comparar se a data do registro atual é diferente do registro anterior e exibir a linha.

Exemplo da segunda opção (estou usando PostgreSQL)

<?php

$pdo = new PDO('pgsql:<conn-string>');


$result = $pdo->query("select 
  (DATE_TRUNC('month',CURRENT_DATE) + CAST(FLOOR(s.idx / 5) || ' day' as interval))::DATE AS data, 
  'lancamento' as descricao,
  CASE WHEN random() < 0.5 THEN ROUND(150 + (random()*100)::numeric,2) ELSE ROUND(150 + (random()*100)::numeric,2) * -1 END as valor
from generate_series(1,24) as s(idx)");

$ultimaData = null;
$acumulado = 0;
$totalEntradaDia = 0;
$totalSaidaDia = 0;

echo '<table>';

while($row = $result->fetch(PDO::FETCH_ASSOC)) {
	$date = DateTime::createFromFormat('Y-m-d', $row['data']);
	$key = $date->format('Ymd');

	if($ultimaData !== null && $ultimaData != $key) {
		printf('<tr><td colspan="2">Entrada: %s, Saida: %s, Saldo dia: %s, Saldo acumulado: %s</td></tr>',
			number_format($totalEntradaDia,2,',','.'),
			number_format($totalSaidaDia,2,',','.'),
			number_format($totalEntradaDia + $totalSaidaDia,2,',','.'),
			number_format($acumulado,2,',','.')
		);

		$totalSaidaDia = 0;
		$totalEntradaDia = 0;
	}

	$ultimaData = $key;

	printf('<tr><td>%s</td><td>%s</td><td>R$ %s</td></tr>',
		$date->format('d'),
		$row['descricao'],
		number_format($row['valor'],2,',','.')
	);

	if($row['valor'] > 0) {
		$totalEntradaDia += $row['valor'];
	} else {
		$totalSaidaDia += $row['valor'];
	}

	$acumulado += $row['valor'];
}

echo '</table>';

printf('<tr><td colspan="2">Entrada: %s, Saida: %s, Saldo dia: %s, Saldo acumulado: %s</td></tr>',
	number_format($totalEntradaDia,2,',','.'),
	number_format($totalSaidaDia,2,',','.'),
	number_format($totalEntradaDia + $totalSaidaDia,2,',','.'),
	number_format($acumulado,2,',','.')
);

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

É so fazer a comparação de duas variáveis, em uma você armazena o dia

se elas forrem igual ou a segunda for nula aparece a linha bege,

se elas forem diferentes você mostra a linha amarela e depois a bege

e no final você faz a ultima ter o valor da primeira,

assim para comparar quando o loop voltar ao inicio

 

Ola Amigo

Seria Isso aqui mais ou menos?

 

$sql = "SELECT * FROM lc_movimento ";
$resultado = mysql_query($sql) or die ("Erro na consulta pacientes");
while ($linha = mysql_fetch_assoc($resultado)){

$id = $linha["id"];
$dia1 = $linha["dia"];
$mes1 = $linha["mes"];
$ano1 = $linha["ano"];
$cat1 = $linha["cat"];
$descricao = $linha["descricao"];
$valor1 = $linha["valor"];



for ($i  =  $dia1) { 
    if ( $i  ==  $i ) { 
   $table = "<td bgcolor='#000000'></td>";  
}else{
   $table = "<td bgcolor='#ffffff'></td>"; 
}   
    
    } 

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que eu entendi, você quer a alternância das cores do bege claro e do escuro

e quando a repetição dos dias mudar, uma no linha amarela com valores diferentes tem que aparecer

 

 

 
<?php
 
    $sql = "SELECT * FROM lc_movimento where dia='$dia' AND mes='$mes' AND ano='$ano'AND tipo='$tipo'";
    $resultado = mysql_query($sql) or die ("Erro na consulta pacientes");
    
    $diaComp = 0;
    $cor = 0;
    while ($linha = mysql_fetch_assoc($resultado)){
 
        $cor++;
        $style = ($cor % 2 == 0) ? "#FFF" : "000";
        
        $id = $linha["id"];
        $dia1 = $linha["dia"];
        $mes1 = $linha["mes"];
        $ano1 = $linha["ano"];
        $cat1 = $linha["cat"];
        $descricao = $linha["descricao"];
        $valor1 = $linha["valor"];
        
        if($dia1 == $diaComp || !$diaComp){
?>
        <!-- Linha Bege -->
        <tr valign="baseline" style="background-color: <?php echo $style ?>">
            <td bgcolor="#CCCCCC"><div align="center" class="style4 style10">1</div></td>
            <td bgcolor="#CCCCCC"><div align="center" class="style7 style10">Dia<? echo $dia1 ?></div></td>
            <td bgcolor="#CCCCCC"><div align="center" class="style7 style10"><? echo $descricao ?></div></td>
            <td bgcolor="#CCCCCC"><div align="center" class="style7 style10">R$<? echo $valor1 ?></div></td>
        </tr>
<?php         
        } else{
?>  
 
        <!-- Linha Amarela -->
        <tr valign="baseline" >
            ...
        </tr>
        <!-- Linha Bege -->
        <tr valign="baseline" style="background-color: <?php echo $style ?>">
            <td bgcolor="#CCCCCC"><div align="center" class="style4 style10">1</div></td>
            <td bgcolor="#CCCCCC"><div align="center" class="style7 style10">Dia<? echo $dia1 ?></div></td>
            <td bgcolor="#CCCCCC"><div align="center" class="style7 style10"><? echo $descricao ?></div></td>
            <td bgcolor="#CCCCCC"><div align="center" class="style7 style10">R$<? echo $valor1 ?></div></td>
        </tr>
 
<?php
        }
        
    }
?>
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você poderia fazer de várias formas. Eu proponho uma das duas a seguir:

  • agrupar os lançamentos por data em um array associativo;
  • comparar se a data do registro atual é diferente do registro anterior e exibir a linha.

Exemplo da segunda opção (estou usando PostgreSQL)

<?php

$pdo = new PDO('pgsql:<conn-string>');


$result = $pdo->query("select 
  (DATE_TRUNC('month',CURRENT_DATE) + CAST(FLOOR(s.idx / 5) || ' day' as interval))::DATE AS data, 
  'lancamento' as descricao,
  CASE WHEN random() < 0.5 THEN ROUND(150 + (random()*100)::numeric,2) ELSE ROUND(150 + (random()*100)::numeric,2) * -1 END as valor
from generate_series(1,24) as s(idx)");

$ultimaData = null;
$acumulado = 0;
$totalEntradaDia = 0;
$totalSaidaDia = 0;

echo '<table>';

while($row = $result->fetch(PDO::FETCH_ASSOC)) {
	$date = DateTime::createFromFormat('Y-m-d', $row['data']);
	$key = $date->format('Ymd');

	if($ultimaData !== null && $ultimaData != $key) {
		printf('<tr><td colspan="2">Entrada: %s, Saida: %s, Saldo dia: %s, Saldo acumulado: %s</td></tr>',
			number_format($totalEntradaDia,2,',','.'),
			number_format($totalSaidaDia,2,',','.'),
			number_format($totalEntradaDia + $totalSaidaDia,2,',','.'),
			number_format($acumulado,2,',','.')
		);

		$totalSaidaDia = 0;
		$totalEntradaDia = 0;
	}

	$ultimaData = $key;

	printf('<tr><td>%s</td><td>%s</td><td>R$ %s</td></tr>',
		$date->format('d'),
		$row['descricao'],
		number_format($row['valor'],2,',','.')
	);

	if($row['valor'] > 0) {
		$totalEntradaDia += $row['valor'];
	} else {
		$totalSaidaDia += $row['valor'];
	}

	$acumulado += $row['valor'];
}

echo '</table>';

printf('<tr><td colspan="2">Entrada: %s, Saida: %s, Saldo dia: %s, Saldo acumulado: %s</td></tr>',
	number_format($totalEntradaDia,2,',','.'),
	number_format($totalSaidaDia,2,',','.'),
	number_format($totalEntradaDia + $totalSaidaDia,2,',','.'),
	number_format($acumulado,2,',','.')
);

@braços

 

Ola amigo Obrigado pela ajuda

mais Não funcionou não sei se é porque to usando sql aqui

 

O que eu to precisando é issotable2.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

ha alguns dias atras tambem estava tentando fazer algo parecido neste post

 

tentei calcular o numero de linhas q correspondem ao cliente, no seu caso igual ao dia, e depois do numero total de linhas, criar uma linha a mais com o resultado total por cliente, mas também nao deu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não funcionou o que?

O banco de dado não tem nada a ver.

Usei postgres porque não tenho sua estrutura.

A origem dos dados tanto faz. O importante é a lógica.

Se copiar e colar não vai funcionar mesmo.

Leia e releia o post que fiz que irá funcionar sim.

 

Veja um exemplo de como ficou o resultado

 

Captura_de_Tela_2014_03_13_s_11_41_34.pn

 

Basta estudar o exemplo e aplicar os mesmos fundamentos no seu código.

 

Como eu disse anteriormente, somente copiar e colar não funcionar mesmo

Também não adianta falar só que não funcionou. Diga o que fez e o que deu errado. Do contrário, fica dificil ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não funcionou o que?

O banco de dado não tem nada a ver.

Usei postgres porque não tenho sua estrutura.

A origem dos dados tanto faz. O importante é a lógica.

Se copiar e colar não vai funcionar mesmo.

Leia e releia o post que fiz que irá funcionar sim.

 

Veja um exemplo de como ficou o resultado

 

Captura_de_Tela_2014_03_13_s_11_41_34.pn

 

Basta estudar o exemplo e aplicar os mesmos fundamentos no seu código.

 

Como eu disse anteriormente, somente copiar e colar não funcionar mesmo

Também não adianta falar só que não funcionou. Diga o que fez e o que deu errado. Do contrário, fica dificil ajudar.

 

Ola Amigo

desculpa a minha ignorância mais ainda sou meio leigo em funções que voce colocou no select eu copiei e colei mais alterando de acordo com minha base mais não conceguir

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não adianta você copiar e colocar vc tem que entender

o codigo que eu fiz é para a base do seu projeto mais repare nas linhas que estão diferentes, oq elas fazem, se precisa de alguma adaptação para funcionar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não funcionou o que?

O banco de dado não tem nada a ver.

Usei postgres porque não tenho sua estrutura.

A origem dos dados tanto faz. O importante é a lógica.

Se copiar e colar não vai funcionar mesmo.

Leia e releia o post que fiz que irá funcionar sim.

 

Veja um exemplo de como ficou o resultado

 

Captura_de_Tela_2014_03_13_s_11_41_34.pn

 

Basta estudar o exemplo e aplicar os mesmos fundamentos no seu código.

 

Como eu disse anteriormente, somente copiar e colar não funcionar mesmo

Também não adianta falar só que não funcionou. Diga o que fez e o que deu errado. Do contrário, fica dificil ajudar.

 

Ola Hufersil

 

Me da Uma Luz Ai... To tentando de varias maneiras mais esta dando um erro aqui e não estou sabendo fazer funcionar

 

Erro: Conexão Efetuada com sucesso!Array ( [0] => 42000 [1] => 1064 [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval))::DATE AS data, 'descricao' as descricao, CASE WHEN random() < ' at line 2 )

 

Minha Base esta assim ( lc_movimento )

Id | descricao | data | valor

 

<?php
//include"config.php";

$pdo = new PDO("mysql:host=localhost;dbname=mrangelc_teste", "mrangelc_01", "" );


//$pdo = new PDO('pgsql:<conn-string>');


$result = $pdo->query("select 
  (('month',CURRENT_DATE) + CAST(FLOOR(s.idx / 5) || ' day' as interval))::DATE AS data, 
  'descricao' as descricao,
  CASE WHEN random() < 0.5 THEN ROUND(150 + (random()*100)::numeric,2) ELSE ROUND(150 + (random()*100)::numeric,2) * -1 END as valor
from lc_movimento(1,24) as s(idx)");

$ultimaData = null;
$acumulado = 0;
$totalEntradaDia = 0;
$totalSaidaDia = 0;

echo '<table>';

while($row = $result->fetch(PDO::FETCH_ASSOC)) {
	$date = DateTime::createFromFormat('Y-m-d', $row['data']);
	$key = $date->format('Ymd');

	if($ultimaData !== null && $ultimaData != $key) {
		printf('<tr><td colspan="2">Entrada: %s, Saida: %s, Saldo dia: %s, Saldo acumulado: %s</td></tr>',
			number_format($totalEntradaDia,2,',','.'),
			number_format($totalSaidaDia,2,',','.'),
			number_format($totalEntradaDia + $totalSaidaDia,2,',','.'),
			number_format($acumulado,2,',','.')
		);

		$totalSaidaDia = 0;
		$totalEntradaDia = 0;
	}

	$ultimaData = $key;

	printf('<tr><td>%s</td><td>%s</td><td>R$ %s</td></tr>',
		$date->format('d'),
		$row['descricao'],
		number_format($row['valor'],2,',','.')
	);

	if($row['valor'] > 0) {
		$totalEntradaDia += $row['valor'];
	} else {
		$totalSaidaDia += $row['valor'];
	}

	$acumulado += $row['valor'];
}

echo '</table>';

printf('<tr><td colspan="2">Entrada: %s, Saida: %s, Saldo dia: %s, Saldo acumulado: %s</td></tr>',
	number_format($totalEntradaDia,2,',','.'),
	number_format($totalSaidaDia,2,',','.'),
	number_format($totalEntradaDia + $totalSaidaDia,2,',','.'),
	number_format($acumulado,2,',','.')
);

Desde já agradeço pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

AI+MEU+DEUS.jpg

 

Você fez exatamente o que pedi para NÃO fazer.... você só copiou e colou o código que mandei e nem se atentou que é para o banco de dados PostgreSQL...

 

Depois dessa, a partir de agora estou ignorando este tópico.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muita Coisa que consegui aprender de PHP, foi através deste Fórum e de Pessoas atenciosas e dispostas a ensinar... infelizmente hoje me deparo com respostas vazias e sem interesse em ajudar.

 

Copiei e colei sim Pois é assim que vou aprendendo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem interesse? Resposta vazia?

 

Por favor...

 

Dê uma lida nos posts anteriores que te mandei, tentando te ajudar, e veja se foram realmente "respostas vazias" ou "sem interesse em ajudar". Perdi meu tempo desenvolvendo código para lhe auxiliar e é assim que sou agradecido...

 

Estava com disposição, até hoje. Mas vendo sua falta de tentativa em entender o que é lhe passado, fiquei desanimado sim - em ajudar você. Dá uma navegada melhor no fórum e veja meus posts e verá se ajudo ou não quem tem interesse em aprender.

 

As vezes ficar ajudando quem quer a resposta pronta cansa, ainda mais quando se tem 11 anos de fórum.

 

Copiar e colar sem ler e fazer uma interpretação do que foi passado não é e nunca foi aprender.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem interesse? Resposta vazia?

 

Por favor...

 

Dê uma lida nos posts anteriores que te mandei, tentando te ajudar, e veja se foram realmente "respostas vazias" ou "sem interesse em ajudar". Perdi meu tempo desenvolvendo código para lhe auxiliar e é assim que sou agradecido...

 

Estava com disposição, até hoje. Mas vendo sua falta de tentativa em entender o que é lhe passado, fiquei desanimado sim - em ajudar você. Dá uma navegada melhor no fórum e veja meus posts e verá se ajudo ou não quem tem interesse em aprender.

 

As vezes ficar ajudando quem quer a resposta pronta cansa, ainda mais quando se tem 11 anos de fórum.

 

Copiar e colar sem ler e fazer uma interpretação do que foi passado não é e nunca foi aprender.

 

Amigão esta cheio de gente que quer ajuda "Pronta" não vai ser a primeira vez que nos deparamos com isso

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.