rfamelli 0 Denunciar post Postado Abril 10, 2013 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
Vinicius Rangel 208 Denunciar post Postado Abril 10, 2013 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
kadunit 4 Denunciar post Postado Abril 10, 2013 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
rfamelli 0 Denunciar post Postado Abril 10, 2013 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
kadunit 4 Denunciar post Postado Abril 10, 2013 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
Vinicius Rangel 208 Denunciar post Postado Abril 10, 2013 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
rfamelli 0 Denunciar post Postado Abril 10, 2013 obrigada gente! vou tentar e qualquer coisa volto aqui. bjs Compartilhar este post Link para o post Compartilhar em outros sites