Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Atualizar dados de um campo de uma tabela conforme campo de outra tabela


vinyipa

Question

Boa tarde Pessoal !!!
Estou começando ainda a me aventurar com programação em php e bd mysql. É o seguinte tenho um sistema de vendas em php onde criei um novo campo na tabela de clientes onde ficará armazenado a data da ultima venda realizada para esse cliente, agora preciso pegar essa informação de um campo de uma outra tabela que seria a tabela de atendimentos. O problema é que nessa tabela podem ter vários atendimentos para os clientes, então preciso pegar apenas a data do ultimo atendimento com venda para cada cliente correspondente da tabela de cliente. Alguém consegue me orientar com algum script para tal necessidade???

Link to post
Share on other sites

4 answers to this question

Recommended Posts

  • 1

Tente assim, ajustando o código abaixo as suas necessidades.

update clientes c
inner join (select idcliente, max(dt_ultimavenda) as dt_ultimavenda
            from atendimentos 
            where vendeu = 1
            group by idcliente
           ) a on a.idclente = c.idcliente
set c.dt_ultimavenda = a.dt_ultimavenda
where c.dt_ultimavenda < a.dt_ultimavenda
                                         

 

Link to post
Share on other sites
  • 0
17 horas atrás, vinyipa disse:

O problema é que nessa tabela podem ter vários atendimentos para os clientes, então preciso pegar apenas a data do ultimo atendimento com venda para cada cliente correspondente da tabela de cliente.

Para pegar a data do último atendimento você tem algumas opções.

1 - se a tabela de atendimentos tem um id único, basta selecionar  max(IdAtendimento) WHERE idCliente = xxx. Onde xxx é o id do cliente que você quer. Isto te dará o atendimento mais atual para este cliente.

2 - ainda seguindo a primeira opção você pode fazer um select buscando o campo idAtendimento WHERE idCliente = xxx order by idAtendimento limit 1. que retornará somente um registro dentro do filtro que você deseja.

3 buscando pela data de atendimento, da mesma forma das opções acima, desde que a data de atendimento seja do tipo datetime.

Link to post
Share on other sites
  • 0
1 hora atrás, Denis Courcy disse:

Para pegar a data do último atendimento você tem algumas opções.

1 - se a tabela de atendimentos tem um id único, basta selecionar  max(IdAtendimento) WHERE idCliente = xxx. Onde xxx é o id do cliente que você quer. Isto te dará o atendimento mais atual para este cliente.

2 - ainda seguindo a primeira opção você pode fazer um select buscando o campo idAtendimento WHERE idCliente = xxx order by idAtendimento limit 1. que retornará somente um registro dentro do filtro que você deseja.

3 buscando pela data de atendimento, da mesma forma das opções acima, desde que a data de atendimento seja do tipo datetime.

Denis, obrigado pela ajuda.

A questão é que preciso alterar esse campo em toda minha base de clientes, não apenas em um, e no caso tem mais uma condição para pegar essa data, o atendimento tem que ter sido "com venda", já que o campo que estou buscando é a data da última venda para este cliente. Na minha tabela de atendimentos tem um campo chamado "vendeu" onde 0 é para não e 1 é para sim.

Então teria que rodar um script que busque essas condições usando como referencia o id do cliente na tabela de clientes e na tabela de de atendimentos onde o id também é informado, atualizando o campo "dt_ultimavenda" da tabela de clientes em todos os clientes onde tiverem tido venda na tabela de atendimento.

Edited by vinyipa
Link to post
Share on other sites
  • 0
1 hora atrás, Denis Courcy disse:

Tente assim, ajustando o código abaixo as suas necessidades.

update clientes c
inner join (select idcliente, max(dt_ultimavenda) as dt_ultimavenda
            from atendimentos 
            where vendeu = 1
            group by idcliente
           ) a on a.idclente = c.idcliente
set c.dt_ultimavenda = a.dt_ultimavenda
where c.dt_ultimavenda < a.dt_ultimavenda
                                         

 

Funcionou perfeitamente Denis, muito obrigado meu nobre!

Link to post
Share on other sites
Guest
This topic is now closed to further replies.


  • Forum Statistics

    • Total Topics
      148682
    • Total Posts
      644515
×
×
  • Create New...