Ir para conteúdo

POWERED BY:

Arquivado

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

PHPower

Somar valores de tabela com dados referenciados em outra

Recommended Posts

Olá pessoal... a questão é a seguinte:

 

Considerando duas tabelas e seus campos:

 

orcamentos: valor, conta

contas: id, conta, tipo

 

 

No campo orcamentos.conta, eu gravo a id correspondente à contas.id.

 

Gostaria de saber como faço uma consulta sql para obter a soma dos valores de orcamentos.valor, onde orcamentos.conta é igual a contas.id, e de modo que eu tenha os totais para cada valor diferente de orcamentos.conta.

 

Será que fui claro?

 

Obrigadão!

 

EDIT: desculpem a caixa alta no nome. Tentei editar, mas não consegui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se percebi bem, será qualquer coisa como isto:

 

SELECT SUM(orcamentos.valor) AS 'Soma'
FROM orcamentos, contas
WHERE orcamentos.conta = contas.id
GROUP BY(orcamentos.conta)

 

Cumps :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se percebi bem, será qualquer coisa como isto:

 

SELECT SUM(orcamentos.valor) AS 'Soma'
FROM orcamentos, contas
WHERE orcamentos.conta = contas.id
GROUP BY(orcamentos.conta)

 

Cumps :)

 

 

É isto mesmo, meu amigo d'além mar! Muito obrigado.

 

Se não for um abuso, gostaria de sofisticar mais a consulta. Seria o seguinte:

 

 

tabela orcamentos

[valor] [conta]

133.00 1

244.00 2

355.00 3

 

 

tabela movimentos

[valor] [conta]

-100.00 1

-200.00 2

-300.00 3

 

 

tabela contas

[id] [conta] [tipo]

1 carteira débito

2 banco débito

3 visa crédito

 

 

Sendo assim, você já explicou como obter os totais da tabela 'orcamentos' para cada tipo de conta, referenciadas pelo id da tabela 'contas'. Gostaria agora de saber como:

 

 

1) Obter numa mesma query os totais, por tipo de conta, para a tabela 'orcamentos' e também para a tabela 'movimentos', de modo que eu possa operá-los num mesmo "loop" (while) do script php e;

 

2) Além disto, agrupar os totais por tipo de conta (débito ou crédito).

 

 

Para a resposta 1), tentei algo com

 

mysql_query("SELECT SUM(orcamentos.valor) AS 'soma',

 

SUM(movimentos.valor) AS 'somov'

 

FROM orcamentos, movimentos, contas

 

WHERE orcamentos.centrocusto = contas.id AND movimentos.conta = contas.id (tanto AND como OR dão resultados inconsistentes)

 

GROUP BY orcamentos.centrocusto, movimentos.conta") or die(mysql_error());

 

 

Muito grato!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem ao que parece está a haver problemas na soma de valores negativos!

 

Eu já criei umas tabelas de exemplo e estou a experimentar...

 

aguarde alguns momentos :)

 

Bem, não estou mesmo a perceber o que está acontecer...

 

A minha sugestão é a seguinte:

Fazes uma consulta para cada um dos totais e depois e só fazeres dois whiles lado-a-lado e ficas com a tabela correcta.

 

Agora parece que há problemas em somar valores negativos!

 

Eu fiz o seguinte para contornar o problema: Somei os valores todos como positivos e no fim passei para negativo.

Isto só vai funcionar se os valores forem sempre negativos

 

SELECT SUM(IF(m.valor < 0, m.valor * -1, m.valor * 1)) * -1 AS 'Soma de Movimentos'
FROM movimentos m, contas c
WHERE m.conta = c.id
GROUP BY(c.id)

 

Se juntar esta consulta com a outra os dados vão ser inconsistentes.

 

Cumps :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem ao que parece está a haver problemas na soma de valores negativos!

 

Eu já criei umas tabelas de exemplo e estou a experimentar...

 

aguarde alguns momentos :)

 

Bem, não estou mesmo a perceber o que está acontecer...

 

A minha sugestão é a seguinte:

Fazes uma consulta para cada um dos totais e depois e só fazeres dois whiles lado-a-lado e ficas com a tabela correcta.

 

Agora parece que há problemas em somar valores negativos!

 

Eu fiz o seguinte para contornar o problema: Somei os valores todos como positivos e no fim passei para negativo.

Isto só vai funcionar se os valores forem sempre negativos

 

SELECT SUM(IF(m.valor < 0, m.valor * -1, m.valor * 1)) * -1 AS 'Soma de Movimentos'
FROM movimentos m, contas c
WHERE m.conta = c.id
GROUP BY(c.id)

 

Se juntar esta consulta com a outra os dados vão ser inconsistentes.

 

Cumps :D

 

Então, que coisa... então o mysql é quem se perde mesmo na conta. Pensei que eu estava a escrever besteira na sintaxe.

 

Pois então, tentarei isto, ou somar trazendo os valores um a um com while, em alguma variável.

 

Meu amigo, muito obrigado pela ajuda!

 

Abraço!

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.