Ir para conteúdo

POWERED BY:

Arquivado

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

JefFlash

Filtrar array gerando novos arrays e selecionar o mais antigo

Recommended Posts

Bom dia pessoal, tenho a seguinte necessidade:

Fiz uma conexão com o banco de dados firebird através do php e estou gerando um array com os pedidos dos clientes.

Acontece que neste relatório de pedidos eu preciso de 2 colunas, uma com o nome do cliente e outra com a data da última compra. Devido a forma como o erp (lixo diga-se de passagem) salva os dados, no cadastro do cliente não tem a data da última compra, então minha alternativa será listar todos os pedidos por data, ligados aos clientes e nesse esse array com os clientes e datas de compra selecionar de cada cliente apenas a compra mais atual e exibir apenas uma vez cada cliente.

Atualmente meu script está conseguindo listar todos os clientes, só que as linhas com o nome do cliente ficam repetidas pois são vários pedidos para o mesmo cliente e do lado, tenho as datas de compra, pra resumir: preciso pegar o registro de data mais atual de cada cliente e não exibir os demais.

Como faço isso, ajuda por favor?

sosr2d.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Da um order by pela data desc juntamente com um first 1.

 

Ex: SELECT FIRST 1 * FROM tabela ORDER BY data DESC

Obrigado amigo, mas tentei assim e só retorna a primeira linha. Preciso da primeira linha de cada cliente... vou tentar fazer uma função que consulta o conjunto dos pedidos de cada cliente a cada registro do array e ver se funciona, mas estou pensando também em desempenho...

Valeu, abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi. Já tentou dar um GROUP BY? Acho que apenas isso iria resolver seu problema.

Consegui resolver fazendo o seguinte: usei uma consulta simples onde lista todos os clientes com seus id e razão social. Depois criei uma função que pega um argumento passado, consulta os pedidos relacionados ordenado pela data asc e volta só a primeira linha usando a função que você passou. Aí para cada registro a função é executada passando o id e então é retornado a data da última compra.

Muito obrigado pelo seu exemplo, estava utilizando o limit 0,1 pois uso no mysql, mas não funcionava no firebird. Valeu mesmo, até mais.

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.