Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Caros,
Bom dia!
Desenvolvi uma página de importação de dados a partir de um arquivo .csv, nesse arquivo tem alguns dados como cpf, nome, telefone, endereço, só que é um telefone por linha fazendo com que dados como nome, cpf, endereço se repitam conforme exemplo abaixo:
00123456789;BELTRANIO DA SILVA;11;98765-432;RUA IMASTERS, 1
00123456789;BELTRANIO DA SILVA;11;2345-6789;RUA IMASTERS, 1
00123456789;BELTRANIO DA SILVA;11;2222-3333;RUA IMASTERS, 1
Pra isso fiz com que todos os dados da planilha seja importada em uma tabela temporaria, apos finalizar a inserção dos dados na tabela temporário criei um select ... insert com where not exists pra inserir o cpf e nome um uma tabela pessoas, os telefones na tabela telefones e os endereços na tabela enderço conforme exemplo abaixo:
mysqli_query($conexao, "INSERT INTO pessoas ('id', 'cpf', 'nome')
SELECT NULL, 'cpf', 'nome' FROM temp_importacao as temp
WHERE NOT EXISTS (SELECT cpf FROM pessoas as pes WHERE pes.cpf = temp.cpf)");
mysqli_query($conexao, "INSERT INTO telefones ('id', 'cpf', 'ddd', 'telefone')
SELECT NULL, 'cpf', 'ddd', 'telefone' FROM temp_importacao as temp
WHERE NOT EXISTS (SELECT cpf FROM telefones as tel WHERE tel.cpf = temp.cpf AND tel.telefone = temp.telefone)");
mysqli_query($conexao, "INSERT INTO enderecos ('id', 'cpf', 'endereco')
SELECT NULL, 'cpf', 'endereco' FROM temp_importacao as temp
WHERE NOT EXISTS (SELECT cpf FROM enderecos as end WHERE end.cpf = temp.cpf AND end.endereco = temp.endereco)");
Até ai tudo bem consigo inserir nas tabelas corretas sem duplicar nenhum dado, só que quando eu importo 1 milhão de cliente e depois tento importar um arquivo de apenas 1 mil clientes essa nova importação é bem demorada.
Gostaria de saber se estou fazendo da maneira correta ou se tem alguma maneira que melhore a execução, e antes que perguntem, não existe a possibilidade de alterar o layout do arquivo .csv.Carregando comentários...