Jump to content


Photo

Importar Csv E Atualizar Duas Tabelas


  • Faça o login para participar
4 replies to this topic

#1 Laureano Pereira

Laureano Pereira

    Novato no fórum

  • Usuários
  • 15 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 23/11/2010, 07:52

Amigos,

Eu tenho um sistema que precisa atualizar diariamente dados em uma tabela (50000 linhas ou mais) a partir de outra (45000 linhas) que é atualizada diariamente via importação de arquivo CSV.


Hoje funciona assim:

1. O usuario envia o arquivo csv para o servidor, através de upload no site;
2. O usuário manda importar o arquivo enviado para dentro de uma tabela mysql...
3. O usuário manda atualizar a segunda tabela... (está funcionando... mas é lento)

e este é o pepino...

nesta ultima atualização, o script percorre a tabela de clientes,
nesta tabela existem oito campos que são números de telefones...
cada número tem de ser checado na outra tabela, telefones bloqueados no procon, e marcar como bloqueados se estiverem...

desta forma, o script roda toda a tabela, faz oito consultas na tabela do procon, para cada linha da tabela de clientes, e atualiza o registro da tabela clientes se necessário...

tentei outra opção...
percorrer a tabela do procon, e fazer 8 updates na tabela de clientes, para cada linha da tabela do procon...
esta segunda opção ficou muito mais lenta que a primeira...

Estou procurando uma outra forma de fazer isso. Não sei se tem como fazer na própria consulta SQL...

Agradeço a ajuda de todos.

Laureano

#2 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 23/11/2010, 10:31

Veja se assim ajuda:

UPDATE clientes c INNER JOIN procon p ON p.telefone=c.telefone1 SET c.bloqueado1=p.bloqueado

Porque do jeito que você está fazendo, são 8 updates por registro. Assim, você faz 8 updates pra todo mundo. É só fazer um for pra ir mudando o número do campo.

#3 Laureano Pereira

Laureano Pereira

    Novato no fórum

  • Usuários
  • 15 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 23/11/2010, 16:28

Veja se assim ajuda:

UPDATE clientes c INNER JOIN procon p ON p.telefone=c.telefone1 SET c.bloqueado1=p.bloqueado

Porque do jeito que você está fazendo, são 8 updates por registro. Assim, você faz 8 updates pra todo mundo. É só fazer um for pra ir mudando o número do campo.


Obrigado LeoB,

Eu imaginava que tinha como fazer esta consulta/atualização via SQL, mas não sabia como... Valeu a ajuda, economizou um bocado de linhas e tempo de processamento.

Testei localmente e funcionou a contento... agora vou implementar no site.

Obrigado novamente.

Laureano


Veja se assim ajuda:

UPDATE clientes c INNER JOIN procon p ON p.telefone=c.telefone1 SET c.bloqueado1=p.bloqueado

Porque do jeito que você está fazendo, são 8 updates por registro. Assim, você faz 8 updates pra todo mundo. É só fazer um for pra ir mudando o número do campo.


Obrigado LeoB,

Eu imaginava que tinha como fazer esta consulta/atualização via SQL, mas não sabia como... Valeu a ajuda, economizou um bocado de linhas e tempo de processamento.

Testei localmente e funcionou a contento... agora vou implementar no site.

Obrigado novamente.

Laureano


LeoB,

Sou eu novamente, fiz a implementação no site, mas o tempo de execução é muito longo...
Enquanto isso o browser fica carregando, como posso ter uma resposta para o usuário enquanto processa a atualização no BD?

Obrigado

#4 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 23/11/2010, 18:43

Apesar de o tempo continuar longo, ele é menor do que costumava ser? Só pra saber.

Sobre a espera do usuário, você pode pesquisar por classes que exibam uma barra de progresso enquanto o código faz o que tem que fazer. Aí dentro do seu for você vai atualizando o andamento.

#5 Laureano Pereira

Laureano Pereira

    Novato no fórum

  • Usuários
  • 15 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 25/11/2010, 18:21

Apesar de o tempo continuar longo, ele é menor do que costumava ser? Só pra saber.

Sobre a espera do usuário, você pode pesquisar por classes que exibam uma barra de progresso enquanto o código faz o que tem que fazer. Aí dentro do seu for você vai atualizando o andamento.


Leo,

O tempo estava exagerado, mais de 15min... por enquanto optei por uma solução um pouco diferente, ao invés de marcar os telefones boqueados no cadastro de clientes após a importação do arquivo do procon estou bloqueando consultando se o telefone esta bloqueado na hora que o usuário seleciona um cliente... ficou mais simples... mas bem mais rápido... por enquanto muito obrigado.

Laureano




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq