Ir para conteúdo
Fórum Script Brasil
  • 0

MYSQL + PHP: Somar valores de uma tabela


Meketref_RJ

Pergunta

Olá,

Preciso mais uma vez da ajuda dos colegas!!!

Estou montando uma consulta no BD e preciso do resultado da soma de determinada tabela. O problema é que os valores nessa tabela estão nesses formatos:

3.250,00

250,00

1,00

Código atual:

$query = mysql_query("select SUM(valor_compra) as soma FROM compras where id_prod='25'")or die(mysql_error()); 
$cont = mysql_fetch_array($query); 
$total = $cont["soma"];

Sei que o problema está nas vírgulas e pontos mas não estou conseguindo arrumar isso. Atualmente o resultado de uma soma de 279,40 + 1.558,20 é de 280.558 ao invéz de 1.837,60 (é assim que preciso que seja a saída).

Se alguém puder me ajudar eu agradeço.

Abraços!!!!

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Abaixo segue um avanço que eu consegui... o problema é que ele não soma os centavos:

$query = mysql_query("select SUM(REPLACE(valor_compra,'.','')) as soma FROM compras where id_prod='25'")or die(mysql_error());
$cont = mysql_fetch_array($query);
$total = $cont["soma"];

O problema com o código acima é que em uma conta ( 1.558,20 + 279,40 ) o resultado é 1837. O correto seria o resultado ser 1837.60.

Alguém sabe como fazer isso? (peço que por favor a pessoa que ajudar coloque o código de como ficaria).

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Não é o trivial mas, tenta isso:

$query = mysql_query("select valor_compra FROM compras where id_prod='25'")or die(mysql_error());
$cont = mysql_fetch_array($query);

$total=0;
while($sum=mysql_fetch_array($cont))
{
  $val = str_replace(".","",$sum['val_compra']);
  $val = str_replace(","."",$val);
  $total += $val/100;
}

Link para o comentário
Compartilhar em outros sites

  • 0
Não é o trivial mas, tenta isso:

$query = mysql_query("select valor_compra FROM compras where id_prod='25'")or die(mysql_error());
$cont = mysql_fetch_array($query);

$total=0;
while($sum=mysql_fetch_array($cont))
{
  $val = str_replace(".","",$sum['val_compra']);
  $val = str_replace(","."",$val);
  $total += $val/100;
}
Olá svjets ... tentei fazer o que você disse mas me retornou o valor zero (0). Até agora o mais perto mesmo foi o código abaixo, porém ele não me retorna o valor da soma dos centavos:
$query = mysql_query("select SUM(REPLACE(valor_compra,'.','')) as soma FROM compras where id_prod='25'")or die(mysql_error());
$cont = mysql_fetch_array($query);
$total = $cont["soma"];

Se tiver alguma outra idéia eu agradeço... abraços!!!

Link para o comentário
Compartilhar em outros sites

  • 0

Cara, o ideal seria se no BD você tivesse essas variáveis declaradas como FLOAT e daí você faria o seguinte:

$query = mysql_query("select SUM(valor_compra) as soma FROM compras where id_prod='25'") or die (mysql_error()); // retorna a soma da coluna valor_compra onde o id_prod = 25. Funciona se a coluna valor_compra for FLOAT ou algum tipo de número...
$cont = mysql_fetch_array($query);
$total = $cont["soma"];
E eu já tive que tratar preços, converter . pra , e vice-versa. Tem uma função que eu criei, talvez seja útil, não sei:
function trata_preco($str) // recebe preços como "21", "21.5" ou "21.51", de dados FLOAT vindos do BD, por exemplo
{
    $return = $str;
    if(strpos($str,".") === false)  // Preços "inteiros", sem centavos, por exemplo: "21"
        $return .= ",00";
    else
    {
        if(strlen(substr($str,strpos($str, "."),strlen($str)-strpos($str, "."))) == 2) // Preços que contém dezenas de centavos inteira, por exemplo: "21.5", adiciona o "0" no final
            $return .= "0";
        $return = str_replace(".",",",$return); // Após o IF acima todos os tipos de preço ficam da seguinte forma: XXXXXX.XX, por ex.: "21.50". Aí só substitui o "." pela ","
    }
    return $return;
}

Daí você poderia chamar a função ela te retorna o preço num formato para exibição, ou seja, de uma maneira amigável ao usuário. Não sei se vai te ajudar em alguma coisa, mas tá aí.

Se precisar de mais coisas, posta aí, ou se não funcionar, sei lá...

Editado por Vithor
Link para o comentário
Compartilhar em outros sites

  • 0

Seguinte, CASO você realmente não possa converter a coluna para FLOAT, no BD por algum motivo, criei um script que faz a soma no formato que está aí:

$valor1 = "3.250,00";
$valor2 = "250,00";
$valor3 = "1,50";

$soma_total = 0;

$parte_inteira = str_replace(".","",substr($valor1, 0, strpos($valor1, ",")));
$parte_decimal = "0.".substr($valor1, strpos($valor1, ",")+1, 2);
$soma_total += (float)$parte_inteira + (float)($parte_decimal);

$parte_inteira = str_replace(".","",substr($valor2, 0, strpos($valor2, ",")));
$parte_decimal = "0.".substr($valor2, strpos($valor2, ",")+1, 2);
$soma_total += (float)$parte_inteira + (float)($parte_decimal);

$parte_inteira = str_replace(".","",substr($valor3, 0, strpos($valor3, ",")));
$parte_decimal = "0.".substr($valor3, strpos($valor3, ",")+1, 2);
$soma_total += (float)$parte_inteira + (float)($parte_decimal);

// O valor de $soma_total é "3501.5" Daí se você quiser, chama a função que eu criei e ela te retornará: 3501,50

Teste aí!

Link para o comentário
Compartilhar em outros sites

  • 0
Olá svjets ... tentei fazer o que você disse mas me retornou o valor zero (0).

Se tiver alguma outra idéia eu agradeço... abraços!!!

Errei no nome do campo do BD (usei $sum['val_compra'] ao invés de $sum['valor_compra']). Tente assim:

$query = mysql_query("select valor_compra FROM compras where id_prod='25'")or die(mysql_error());
$cont = mysql_fetch_array($query);

$total=0;
while($sum=mysql_fetch_array($cont))
{
  $val = str_replace(".","",$sum['valor_compra']);
  $val = str_replace(","."",$val);
  $total += $val/100;
}

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...