Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite, pessoal!
Preciso da ajuda de vocês para resolver um problema aparentemente simples. Porém não tenho muitos conhecimentos em PHP e já estou há horas quebrando a cabeça para tentar resolver um probleminha aqui.
A bronca é a seguinte:
Eu tenho um banco de dados no qual estão cadastrados os pagamentos realizados pelos clientes (são pagamentos parcelados).
Em uma página eu exibo a lista de todos os clientes e a soma dos valores pagos até o momento por cada um deles.
O que eu quero agora é exibir na mesma linha a data do último pagamento realizado por cada cliente.
Exemplo:
Id | Cliente | Valor Pago | Último Pgto
1 | joao | 150,00 | 10/06/2013
2 | josé | 100,00 | 15/05/2013
3 | maria | 0,00 |
4 | josé | 100,00 | 04/05/2013
O problema é que no meu código o campo último pagamento não fica em branco quando não há pagamento, como no exemplo da cliente maria acima, pois o while repete a data de ultimo pagamento do cliente que está acima, ficando desta forma:
Id | Cliente | Valor Pago | Último Pgto
1 | joao | 150,00 | 10/06/2013
2 | josé | 100,00 | 15/05/2013
3 | maria | 0,00 | 15/05/2013
4 | josé | 100,00 | 04/05/2013
O que eu quero, portanto, é que quando a busca não encontrar o id de um cliente na tabela pagamentos, ela não exiba nada, ao invés de repetir o valor anterior.
Abaixo está a parte do meu código que faz o solect:
<?php
$Selectpgto = mysql_query("SELECT * FROM pagamentos WHERE IdCliente = '$Id'");
while($ResultadoSelectpgto = mysql_fetch_array($Selectpgto)){
$UltimoPgto = $ResultadoSelectpgto['DataPagamento']; }
?>
<?php if(isset($UltimoPgto)) {echo ConverterData($UltimoPgto);} ?>
Espero que tenha ficado claro.
Conto com vocês. Obrigado!
Bom pra começar nem etendi bem ta meio confuso isso ai, mas tentando ajudar vejo que voce tem o seguinte
Tabela Cliente
Tabela Pagamento
A tabela pagamento recebe o id do cliente toda vez que ele paga e sua clausula where diz para pegar todos da tabela pagamento quando o ID existir então logicamente ele vai retornar todos valores.
Outra coisa é que o ideal é que sem sua tabela de pagamentos tenha um ID primario e auto increment e logo um ClienteID por exemplo pra receber o id do cliente assim podemos usar o GROUP BY do mysql para agruparmos a busca e usar o ORDER BY DESC para a busca listar do ultima para o primeiro, logo em seguida usando o LIMIT setado em 1 para retornar apenas o ultimo pagamento.
por exemplo:
$pegardados = mysql_query("SELECT * FROM pagamento WHERE ClienteID ='$id' GROUP BY ClienteID ORDER BY desc LIMIT 1");
seria mais ou menos essa query basta ajustar ela ai e trocar as posições caso retorne algum erro, por que eu posso ta errado em alguma coisa também.
Bom essa é a lógica que eu imaginaria, espero ter ajudado.
Tentando explicar melhor:
Existem duas tabelas: um pra cadastro dos clientes e outra dos pagamentos.
Na tabela "clientes" estão cadastrados todos os clientes, valor total devido por eles e outras informações menos importantes.
Na tabela "pagamentos" estão cadastrados os pagamentos realizados. Lá existem os seguintes campos: "ID", que é uma chave primária e auto increment; "ValorPago", que pega o valor da parcela paga; "IdCliente" para identificar de quem foi o pagamento e "DataPagamento", que registra a data em que foi realizado o pagamento.
Pois bem..
Na página ListarClientes.php eu tenho uma tabela com as seguintes informações:
nome do cliente; valor devido; e valor pago até o momento. (O valor pago até o momento é a soma dos pagamentos que estão na tabela "pagamentos", que eu consigo capturar pelo IdCliente).
Acontece que nem todos os clientes têm pagamentos inseridos na tabela pagamentos. E é aí que está o problema, pois quando puxo a data do último pagamento na página ListarClientes, ao invés desse campo ficar em branco na linha dos clientes que ainda não realizaram nenhum pagamento, o while repete a data do pagamento do cliente imediatamente anterior. E eu não quero que ele faça isso.
Eu quero que a linha fique em branco quando não houver o respectivo IdCliente na tabela pagamentos e volte a mostrar a data quando houver o registro do pagamento com o IdCliente igual ao Id do cliente. Lembrando que quando houver mais de um pagamento de um mesmo cliente a data que deve aparecer é a do último registro!
Espero que tenha ficado mais claro agora!
Conto com vocês!
Um simples exemplo
Um simples exemplo
$Selectpgto = mysql_query("SELECT SELECT max(DataPagamento ) as DataPagamento,campo x ,campo y
FROM pagamentos WHERE IdCliente = '$Id'");Excelente, Marcos Xavier!
De início deu erro, mas quando retirei uma parte do código funcionou perfeitamente!!!!
O código ficou da seguinte forma:
<?php
$Selectpgto = mysql_query("SELECT max(DataPagamento ) as DataPagamento FROM pagamentos WHERE IdCliente = '$Id'");
while ($ultimopagamento = mysql_fetch_array($Selectpgto)) {
$DataUPgto = $ultimopagamento['DataPagamento'];}
?>
Muito Obrigado!
Problema resolvido!!!
Ficou estranho cara, pois no meu caso eu apenas usaria o mysql_fetch_array caso o filtro WHERE fosse com bastante dados.
Tipo estado, cidade.
Logo creio eu que seu ID seja único não é ?
Vai dar erro ..