Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como somar dois valores correspondentes de tabelas diferentes?

Estou desenvolvendo um sistema de fluxo de caixa, nele tenho uma tabela onde cadastro as contas com seus respectivos saldos, e tenho duas tabelas de credito e debido onde cadastro as entradas e saídas. Agora estou em uma fase em que estou tentando fazer um SELECT com INNER JOIN entre a tabela de contas e a tabela de credito, afim de obter a soma entre os valores de credito correspondente ao ID da conta em questão + saldo que já tinha na conta. Porém não consigo retornar o valor desejado, o que reparei é que se a conta contém 3 registros com o seu ID na tabela credito ele multiplica o saldo anterior por 3 e depois soma de fato as entradas de crédito. Alguém poderia me ajudar?

Só para deixar claro:

Na tabela contamovimento tenho:

id 1 , nome Santander, saldo 5000.00; id 3, nome Itau, saldo 200.00

Na tabela credito:

id 1, valor 430.00, idcontamovimento(FOREIGN KEY) 1; id 1, valor 520.00, idcontamovimento 1; id 3, valor 120.00, idcontamovimento 3; id 3, valor 120.00, idcontamovimento 3; id 3, valor 120.00, idcontamovimento 3;

A soma com o código que postei abaixo está me retornando:

Itau 960.00 Santander 10950.00

Desde já agradeço!

public function listarSaldo (){
        $query = "SELECT ct.nome, sum(ct.saldo + cr.valor) as saldo FROM contamovimento ct INNER JOIN credito cr on ct.id = cr.idcontamovimento GROUP BY nome";
        $conexao = Conexao::pegarConexao();
        $resultado = $conexao->query($query);
        $lista = $resultado->fetchAll();
        return $lista;
    }
2 respostas

Oi Stefano, tudo bom?

Acredito que o problema esteja no operador de soma. O sum() é invocado para cada entrada em ct por isso seu valor está sendo multiplicado. Tenta retirar o cr.valor da soma:

        $query = "SELECT ct.nome, sum(ct.saldo)+cr.valor as saldo FROM contamovimento ct INNER JOIN credito cr on ct.id = cr.idcontamovimento GROUP BY nome";

Abraço

solução!

Boa tarde André.

Obrigado por sua resposta, mas infelizmente não deu certo, mas consegui resolver aqui.

Eu resolvi assim, o inverso do tinha proposto:

sum(cr.valor) + ct.saldo as saldo

Assim está tudo funcionando corretamente!

Ótimo final de semana.

Abraço!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software