Ir para conteúdo

POWERED BY:

Arquivado

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

Leo Araujo

[Resolvido] Colorir Célula Se 70%

Recommended Posts

Boa Tarde,

É o seguinte, estou com uma tabela gerada por um SELECT que faz a soma de valores.

 

$sql = mysql_query ("SELECT clientes.nomecli as nome, sum(cartuchos.valor) as soma FROM clientes, cartuchos WHERE cartuchos.dtserv BETWEEN '$de' AND '$ate' and clientes.codcliente=cartuchos.codcliente GROUP BY nome ORDER BY soma DESC") or die (mysql_error());

// Tabela de Dados

echo "<p>";

echo "<table border='1' width=\"100%\" cellspacing='1' align='center'>";

echo "<tr id='tabela'>";

echo "<td align='center'>Cliente</td>";

echo "<td align='center'>Valor</td>";

echo "</tr>";

echo "</font>";

while ($reg = mysql_fetch_assoc($sql)){

echo "<tr id='tabela1'>";

echo "<td width=75% id='nome' align='left'>".$reg['nome']."</td>";

echo "<td width=25% id='soma' align='center'>R$ ".$reg['soma']."</td>";

echo "</tr>";

$t += $reg['soma'];

$i ++;

}

// Mostrando Totais

$i -=1;

echo "<tr>";

echo "<td align='center' id='total'>".$i."</td>";

echo "<td align='center' id='total'>R$ $t,00</td>";

echo "</tr>";

echo "</table>";

Ok, está tudo funcionando os IDs são por causa de um CSS para controlar cores.

 

O que eu estou querendo fazer é o seguinte, que o nome dos clientes seja colorido de azul quando a soma dos valores atingir 60% do total, verde quando estiver em 30% do total e vermelho nos últimos 10%.

 

Possível?

 

 

Grato,

Leo

Compartilhar este post


Link para o post
Compartilhar em outros sites

É possível, claro.

 

Se entendi direito, você tem:

 

$reg['soma']

Com essa variável, pode fazer qualquer tipo de manipulação para atingir o seu objetivo.

 

Veja um exemplo, e não a solução:

 

if( ( $reg['soma'] % 2 ) == 0 ) {
 $cor = 'red';
} else {
 $cor = 'blue';
}

Nesta implementação, se a soma for par, a cor é vermelha.

 

Caso contrário, a cor fica azul.

 

Agora, implemente do jeito que você precisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

cria uma classe pra cada um desses valores e calcula...

 

if 60% do total

echo "<tr class='amarelo'">"

else if 30% do total

echo "<tr class='vermelho'">"

else if 10%

echo "<tr class='verde'">"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kra, você vai entrar no dilema que eu passei tentando montar um sistema de relatorios!!!!

 

 

o grande problema desta funcao que voce quer... eh para voce ter quantos % vale cada opcao (do loop) ele primeiro precisa de um total para processar as contas....

 

e como podemos ver no codigo, ele escreve primeiro os valores de cada registro e vai somando... somente depois de processar tudo é que voce vai ter o resultado final $t

 

 

o que pode ser feito???? eu vejo 2 saidas!

 

 

1- Realizar uma consulta SQL a mais para pegar o valor total antes!

2- gravar as informacaoes em XML e dps montar um script para ler elas e organizalas na pagina!

 

 

eu aconselho a primeira viu!!! faca o mesma query que você executa antes... so que ao inves de pegar os resultados, pede so um SUM() para pegar os valores!

EX:

$sql = mysql_query ("SELECT sum(cartuchos.valor) as soma FROM clientes, cartuchos WHERE cartuchos.dtserv BETWEEN '$de' AND '$ate' and clientes.codcliente=cartuchos.codcliente") or die (mysql_error());

aqui eu tirei todos os parametros que ele pega da DB, o order by e o group by pq nao serao nescessarios!

 

se voce fizer desta forma... voce pode mexer no loop que exibe as informacoes, calcular quanto vale o $reg[some] em % com relacao ao total... podendo fazer os IF's nescessarios para mudar as cores!!!

 

 

abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Funciona,

mas não do jeito que preciso, gosto da sua forma de responder às perguntas, mas é o seguinte.

 

Da forma que você sugeriu todos os nomes ficam azuis ou vermelhos. eu preciso, por exemplo:

 

 

1 Andre 3

2 Carlos 2

3 Caio 2

4 Leo 1

5 Maria 1

6 Marta 1

Total 10

 

Andre , Carlos e Caio ficariam azuis

Leo e Maria ficariam verdes

Marta ficaria em vermelho.

 

Grato,

Leo

Compartilhar este post


Link para o post
Compartilhar em outros sites

tipo você pode fazer a soma total e jogar em uma coluna

exemplo

SELECT c.nomecli as nome, sum(ca.valor) as soma, (select sum(valor) from cartuchos) as total FROM clientes c, cartuchos ca WHERE ca.dtserv BETWEEN '$de' AND '$ate' and c.codcliente = ca.codcliente GROUP BY nome ORDER BY soma DESC

depois você vai incrementando a soma e verificando

 

$somando += $row['soma'];
if ($somando/$row['total'] < 0.6){
  //colori de azul
}else if($somando/$row['total'] < 0.9){
   //colori de verde
}else{
   //colori de vermelho
}
claro q é uma hunilde sugestão neh!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

no seu caso é $reg neh!!!

 

tinha imaginado isso, mas fiquei na duvida, valeu

 

É, Não consegui, funciona como eu tinha conseguido ja, fica tudo de uma cor só...

Compartilhar este post


Link para o post
Compartilhar em outros sites

testa desta forma

$somando += $row['soma'];
if ($somando/$row['total'] < 0.6){
 <tr bgcolor='blue'>
}else if($somando/$row['total'] < 0.9){
   <tr bgcolor='green'>
}else{
   <tr bgcolor='red'>
}

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.