FórumGdH

Página Inicial do Guia do Hardware

Registrar FAQ Calendário Pesquisar Mensagens de Hoje Marcar Fóruns Como Lidos

Voltar   FórumGdH > Profissional > Programação, scripts, web e banco de dados
Bem-vindo ao FórumGdH
Não se esqueça de se registrar, é grátis . Nós temos 754.102 usuários, convidamos você fazer parte de nossa comunidade também! Se ainda não encontrou o que procura use nossa pesquisa. Esperamos que aprecie nosso trabalho.

Resposta
 
Opções do Tópico
Antigo 07-04-2005, 22:13   #1 (permalink)
fredtech
Newbie
 
Registrado em: Apr 2005
Mensagens: 5
Reputação: 0 fredtech está indo no caminho certo
Padrão [PHP] Como somar resultados obtidos em consulta no bd???

Olá

Caros colegas, estou "me matando" pra resolver algo que creio ser muito simples, mas que já perdi mais de 6 hrs com diversas tentativas diferentes e nenhuma com resp. positiva do que estou querendo.

Explicando...

Fiz uma consulta SQL ao meu BD (em MySql) na tabela 'pontos' e nela possui os seguintes campos: id_pontos, login, data, qtde_pontos

A consulta SQL esta assim:
Código:
$sql = "SELECT * FROM pontos WHERE login='$id'"
Quero listar os pontos de uma pessoa a partir do seu "login", que é um código!
Ex:

No Browser eu forneço o codigo para a pesquisa:
http://blablabla.blablabla.com/pontos.php?id=1234

Usando WHILE:
Código:
while ($i < $nresult) { $data = @mysql_result($result,$i,"data"); $qp = @mysql_result($result,$i,"qtde_pontos"); ... <tr> <td width="50%"> <?=$data;?> </td> <td width="50%"> <?=$qp;?> </td> </tr>
Eu consigo listar todos os pontos da pessoa que possui o código que eu informei na url do browser, mas...

O PROBLEMA:

Gostaria de SOMAR todos esses pontos encontrados em "qtde_pontos" em um variavel e imprimir pro usuario. (parte negrito foi editada p/ melhor entendimento)

Essa parte nao estou conseguindo fazer, já tentei por dentro do WHILE mas ele informa somente o ultimo "qtde_pontos" encontrado na pesquisa. Tentei com vetor, tambem dentro do WHILE, mas acho que não devo ter feito direito ou não estou colocando no lugar correto... sei lá

Se alguem puder me ajudar, ficaria mto grato.
Desde já, agradeço, obrigado pela atenção.
fredtech está offline   Responder com Quote
Antigo 07-04-2005, 23:04   #2 (permalink)
Acquila
Super Participante
 
Registrado em: Mar 2002
Mensagens: 653
Reputação: 21 Acquila está indo no caminho certo
Padrão

Fred, vc pode obter esse resultado direto através da query SQL, mas se vc preferir fazer no php, simplesmente acrescente uma variável qualquer, por exemplo, $soma, dentro do seu laço while. Essa variável vai receber a soma dos valores obtidos nas linhas lidas.

no seu exemplo:

Código:
$soma=0; while ($i < $nresult) { $data = @mysql_result($result,$i,"data"); $qp = @mysql_result($result,$i,"qtde_pontos"); $soma=$soma+$qp; ...
tente aí...

[]!
Acquila está offline   Responder com Quote
Antigo 07-04-2005, 23:25   #3 (permalink)
oitavo_anjo
Super Participante
 
Avatar de oitavo_anjo
 
Registrado em: Aug 2004
Localização: teresina
Idade: 2
Mensagens: 630
Reputação: 19 oitavo_anjo é um modelo a seguiroitavo_anjo é um modelo a seguiroitavo_anjo é um modelo a seguir
Enviar mensagem via MSN para oitavo_anjo
Padrão

acho q entendi a tua ideia.. eh o seguinte.. soh vai dar certo, se cada vez q a pessoa se logar, ou sei lah.. fizer algo q aumente a pontuaçao, vc vai incrementar o campo da tabela campo correspondente a esse usuario, no caso.. qtde_pontos, creio eu.. segue o script pra incrementar esse campo..

<?php
...
// conexao com banco
...
$query = "SELECT qtde_pontos FROM pontos WHERE login='$id'"; // query q vai receber o valor atual do campo
$r = mysql_query($query, $link) or die(mysql_error());
$valor = mysql_fetch_array($r, MYSQL_ASSOC); // o valor vai pro vetor $valor
$valor_atual = $valor['qtde_pontos']; // so pra ficar claro q $valor_atual contem o valor ate aqui de pontos
...
...
$valor_atual++;
$query = "UPDATE pontos SET qtd_pontos='$valor_atual' WHERE login='$id'";
mysql_query($query, $link) or die(mysql_error()); // aqui ja ta atualizado o valor do campo, pra proximas buscas
...
echo "O usuario ".$id." possui ".$valor_atual." pontos."; // mostra a quantidade de pontos
...
mysql_close($link); // fecha conexao com banco
?>
__________________
Desktop (Frankenstein )
Core2Duo E6300 - 1,83Ghz, @1Gb, 80Gb, GeForce 8400GS - WindowsXP SP3 - Ubuntu 8.10
NoteBook (Dell ) Core2Duo T6500 - 2,1Ghz, @3Gb, 320Gb - Debian 5 - FreeBSD 7.2
oitavo_anjo está offline   Responder com Quote
Antigo 07-04-2005, 23:44   #4 (permalink)
fredtech
Newbie
 
Registrado em: Apr 2005
Mensagens: 5
Reputação: 0 fredtech está indo no caminho certo
Padrão

Citação:
Postado Originalmente por Acquila
Fred, vc pode obter esse resultado direto através da query SQL, mas se vc preferir fazer no php, simplesmente acresce...
pois eh.. já havia tentado desta maneira que vc sugeriu, mas não deu certo, mesmo assim obrigado.

Ele imprime a resposta de $soma
mas com valor 0 (zero)

Vou por todos os codes...
Código:
<? include "includes/connect.php"; $sql = "SELECT * FROM pontos WHERE login='$id'"; $result = @mysql_db_query($db,$sql,$connect) or die(mysql_error()); $nresult = @mysql_num_rows($result); if ($nresult > 0) { $i=0; ?> ... <? $soma=0; while ($i < $nresult) { $data = @mysql_result($result,$i,"data_compra"); $v = @mysql_result($result,$i,"valor"); $qp = @mysql_result($result,$i,"qtde_pontos"); $soma=$soma+qp; echo $soma; // -------------- AQUI IMPRIME O VALOR ZERO TB ?> ... <td width="50%"> <?=$data;?> </td> <td width="50%"> <?=$qp;?> </td> ... <? $i++; } ?> ... <td>Total de pontos encontrados: <?=$nresult;?> <br> Total de pontos: <?=$soma;?> </td> ... <? } else { ?> <tr> <td>Foi informado incorretamente ou não foi informado o código de usuário.</td> </tr> <? } ?>
desculpem colar tanto código...

a resposta que visualizo no browser é:

Ex:
Codigo de usuario: 12345
Data:________Pontos:
01/02/2003___200
06/01/2005___100
10/12/2004___50

Total de pontos encontrados: 3
Total de pontos: 0

e não a resposta que desejo que seria 200+100+50 :/
fredtech está offline   Responder com Quote
Antigo 07-04-2005, 23:46   #5 (permalink)
fredtech
Newbie
 
Registrado em: Apr 2005
Mensagens: 5
Reputação: 0 fredtech está indo no caminho certo
Padrão

Citação:
Postado Originalmente por oitavo_anjo
acho q entendi a tua ideia.. eh o seguinte.. soh vai dar certo, se cada vez q a pessoa se logar, ou sei lah.. fizer a...
Nao seria isso...
Nao irei alterar nada no BD

Mesmo assim valeu!
fredtech está offline   Responder com Quote
Antigo 07-04-2005, 23:56   #6 (permalink)
oitavo_anjo
Super Participante
 
Avatar de oitavo_anjo
 
Registrado em: Aug 2004
Localização: teresina
Idade: 2
Mensagens: 630
Reputação: 19 oitavo_anjo é um modelo a seguiroitavo_anjo é um modelo a seguiroitavo_anjo é um modelo a seguir
Enviar mensagem via MSN para oitavo_anjo
Padrão

.. meo, eu acho q soh vai existir um login com akele determinado id.. entao pra q tu tah usando esse while??..
Citação:
while ($i < $nresult) {
.. acho q tu ta se inrolando ae... se n foi com eu disse antes... tu qr somar todos os pontos de determinado usuario? ou somar o ponto de todos?.. se for o 1º caso.. o script q eu te disse antes faz o serviço... se for o segundo... usa essa consulta
Código:
SELECT SUM(qtde_pontos) FROM pontos
isso ae soma os pontos de todos os usuario
__________________
Desktop (Frankenstein )
Core2Duo E6300 - 1,83Ghz, @1Gb, 80Gb, GeForce 8400GS - WindowsXP SP3 - Ubuntu 8.10
NoteBook (Dell ) Core2Duo T6500 - 2,1Ghz, @3Gb, 320Gb - Debian 5 - FreeBSD 7.2
oitavo_anjo está offline   Responder com Quote
Antigo 08-04-2005, 0:02   #7 (permalink)
fredtech
Newbie
 
Registrado em: Apr 2005
Mensagens: 5
Reputação: 0 fredtech está indo no caminho certo
Padrão

Citação:
Postado Originalmente por oitavo_anjo
.. meo, eu acho q soh vai existir um login com akele determinado id.. entao pra q tu tah usando esse while??..
Citação:
while ($i < $nresult) {
.. acho q tu ta se inrolando ae... se n foi com eu disse antes... tu qr somar todos os pontos de determinado usuario? ou somar o ponto de todos?.. se for o 1º caso.. o script q eu te disse antes faz o serviço... se for o segundo... usa essa consulta
Código:
SELECT SUM(qtde_pontos) FROM pontos
isso ae soma os pontos de todos os usuario
Seguinte... pontos.php serve para o usuario checar seus pontos, informando o seu codigo de usuario e visualizando todos os seus pontos em datas diferentes...
o while serve pra isso, pra procurar em toda a tabela os pontos do mesmo usuario!

depois de fazer a busca por todos os pontos daquele usuario, eu quero que ele some o total de pontos e imprima. Só isso, simples, mas ta complicado.. rs
fredtech está offline   Responder com Quote
Antigo 08-04-2005, 0:12   #8 (permalink)
oitavo_anjo
Super Participante
 
Avatar de oitavo_anjo
 
Registrado em: Aug 2004
Localização: teresina
Idade: 2
Mensagens: 630
Reputação: 19 oitavo_anjo é um modelo a seguiroitavo_anjo é um modelo a seguiroitavo_anjo é um modelo a seguir
Enviar mensagem via MSN para oitavo_anjo
Padrão

.. a vei, agora tah claro... essa funçao SUM() vai fazer isso.. basta acrescentar ql usuario deseja.. vai ficar assim
Código:
SELECT SUM(qtde_pontos) FROM pontos WHERE login='$id'
essa linha vai somar todos os pontos desse usuario, ou entao pode fazer o seguinte
Código:
$query = "SELECT COUNT(qtde_pontos) FROM pontos WHERE login='$id'"; $r = mysql_query($query, $link) or die(mysql_error()); $valor = mysql_num_rows($r); // ele vai mostrar todos os pontos desse usuario
__________________
Desktop (Frankenstein )
Core2Duo E6300 - 1,83Ghz, @1Gb, 80Gb, GeForce 8400GS - WindowsXP SP3 - Ubuntu 8.10
NoteBook (Dell ) Core2Duo T6500 - 2,1Ghz, @3Gb, 320Gb - Debian 5 - FreeBSD 7.2
oitavo_anjo está offline   Responder com Quote
Antigo 08-04-2005, 1:37   #9 (permalink)
fredtech
Newbie
 
Registrado em: Apr 2005
Mensagens: 5
Reputação: 0 fredtech está indo no caminho certo
Padrão

um amigo meu conseguiu me ajudar

eu tinha que colocar isto:

Código:
$sql_pontos = "SELECT SUM(qtde_pontos) as SOMA FROM pontos WHERE login='$id'"; $result_pontos = mysql_db_query($db,$sql_pontos,$connect) or die(mysql_error()); $total = mysql_result($result_pontos,"SOMA");
mesmo assim agradeço aos que tentaram me ajudar, obrigado.
abraços
fredtech está offline   Responder com Quote
Resposta


Opções do Tópico

Regras de Mensagens
Você não pode criar tópicos
Você não pode postar respostas
Você não pode anexar arquivos
Você não pode editar suas mensagens

Código vB está Ligado
Smiles estão Ligado
Código [IMG] está Ligado
Código HTML está Desligado
Ir para...


Horários baseados na GMT -3. Agora são 9:35.