Ir para conteúdo

Arquivado

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

rfamelli

conferencia de valores em duas tabelas diferentes

Recommended Posts

Boa tarde pessoal

 

tenho duas tabelas

 

 

ENTRADA

 

id_cliente data valor

 

1 | 10/04/2013 | R$100,00

 

PAGAMENTO

 

id_cliente data valor_pag

 

1 | 10/04/2013 | R$ 80,00

1 | 10/04/2013 | R$ 20,00

 

 

e preciso fazer uma conferência a qual os valores que inseriram em "entrada" sejam os mesmos em "pagamento", por cliente.

 

porem na tabela "pagamento", esses valores podem estar quebrados em varios valores, e a soma deles é que deve bater com o valor da tabela "entrada", deu pra entender?

 

em uma tela devo fazer essa checagem e se os valores não baterem tem que aparecer algo como

 

"Faltou o pagamento de R$ 20,00" para o cliente 1 na data de 10/04/2013

 

 

a logica é essa mas nao consegui codificar isso, até pesquisei algo sobre left join com SUM mas não deu certo.

 

Alguem pode me dar um direcionamento?

 

obrigada desde já!

 

 

 

 

 

 

 

 

 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

não vai da certo mesmo, o banco não vai consegui somar um dado do tipo CHAR ou VARCHAR que seja.

 

essa sua prática de colocar os valores com cifrão e tudo mais é errada.

 

deve ser um campo decimal ou float (ele não vai aceitar virgula) e ai sim você consegue criar operação matemática com eles.

 

na hora de mostrar que você formata o dado para o usuário

 

dica: o ponto deve separar os decimais e não os milhares.

Exemplo: 1,234.34

no banco fica 1234.34

 

^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por partes....

 

primeiro voce precisa verificar se os valores batem, certo? Dependendo da forma como voce insere os valores na tabela "entrada" esses valores já deveriam bater sempre, se eu entendi o seu problema

 

contudo, soma os valores da tabela de pagamento:

 

 

 

select data, SUM(valor_pag) as valor from pagamento where id = '1'

 

dai voce salva o valor da variavel valor e data em uma variavel, tipo :

 

 


$data = $row['data'] $valor = $row['valor']

 

 

Faz o mesmo pra segunda tabela e em seguida já pode fazer todas as comparações

 

:)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigada pelas respostas,

 

desculpe Vinicius, eu coloquei aqui no forum R$ no valor, mas na verdade no meu bd está float sim.

 

entao vamos lá

 

pra entender melhor,

 

eu separo o que a pessoa consumiu de serviço na tabela entrada.

e o que ela realmente pagou pelo serviço na tabela pagamento, por isso preciso fazer a consulta nas duas, e ver se na hora de pagar a pessoa que recebe inseriu o valor correto (há essa questao pq existem caixinhas, que so pagas em dinheiro, e o resto pago em cartao de credito)

 

depois de feitas essas consultas nas duas tabelas

 

tenho que gerar um relatório que me diga

 

se o cliente "2" na data "10/04/2013" consumiu o total de serviços de R$ 100,00 ele deveria ter pago R$ 100,00

se ele pagou apenas R$ 80,00, está faltando R$ 20,00.

 

eu tentei assim:

 

$sql = "SELECT SUM(valor) as SOMA, id_cl, data FROM entrada GROUP BY id_cl";

$exec = mysql_db_query("$db",$sql,$connection);
while ($rows = mysql_fetch_array($exec)) {
$data = $rows ["data_vencimento"];
$id_cl = $rows ["id_cl"];
$soma = $rows["SOMA"];

 

aqui printei tudo, e deu certo, agrupou por cliente e pela data, os valores

 

 

$sql = "SELECT SUM(valor_pag) as SOMA_PAG, id_cl, data FROM pagamento GROUP BY id_cl";

$data = $rows ["data_vencimento"];
$id_cl = $rows ["id_cl"];
$soma_pag = $rows["SOMA_PAG"];

 

 

aqui printei tudo, e deu certo, agrupou por cliente e pela data, os valores

 

mas a minha duvida é? eu não quero printar os dois relatórios.

eu quero que depois de feita a consulta, mostre um relatório com aquela condiçao que mencionei acima

 

 

e isso nao sei como fazer...

 

pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A lógica é a que te falei, salve os dados nas variaveis.

 

select entrada.id_cliente as entrada_id_cliente,
       entrada.data as entrada_data,
       entrada.valor as entrada_valor,
       pagamento.data as pagamento_data,
       SUM(pagamento.valor) as pagamento_valor
       from entrada entrada, pagamento pagamento
       where entrada.id_cliente = pagamento.id_cliente

       

 

 

 

Nesse momento voce provavelmente ja tem tudo que precisa pra comparar, seus campos sendo float fica mais facil comparar pelo valor se as datas forem iguais ( caso tenha que comparar as datas tambem procure sobre a funcao date() do php )

 

ai pra cada interacao voce confere se o valor do sum dos pagamentos é igual ao valor do sum da entrada, se nao for voce toma o caminho que voce quiser.

Compartilhar este post


Link para o post
Compartilhar em outros sites
SELECT SUM(pagamento.valor_pag) as valor_pago, a.entrada, a.valor
FROM entrada as a, pagamento as b
WHERE valor_pago = entrada.valor AND data = '2013-04-10'

Presumindo que sua data esteja no formato correto

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.