Tenho a seguinte situação
---------------------------------
ESTRUTURA DO TXT A SER IMPORTADO
---------------------------------
CAD_CLIENTEEVENTOS
4202;28/02/2010;00:00:20;E470000;E1;
^^
4202;28/02/2010;00:00:23;R400000;U1;
^^
*PRIMEIRA LINHA DO TXT (CAD_CLIENTESEVENTOS) é a identificação do txt a ser importado, se o nome for diferente disso nao processa.
*SEGUNDA LINHA DO TXT SAO OS CAMPOS A SEREM IMPORTADOS PARA O MYSQL SEPARADOS POR (
*TERCEIRA LINHA DO TXT ( ^^ ) SERVE PARA SEPARAR OS CADASTROS.
PHP DEVE FAZER A SEGUINTE FUNÇÃO
----------------------------------
1--> APÓS ALGUMAS VERIFICAÇÕES Q NAO VEM AO CASO NESTE MOMENTO...
2--> ANALISAR SE OS REGISTROS A SEREM IMPORTADOS JA EXISTEM NA TABELA MYSQL, CASO SIM EFETUAR SOMENTE A ATUALIZAÇÃO DE DADOS.
ESTA VERIFICAÇÃO DEVE SER TOMADA COMO BASE:
SE -> cliente + data_ocorrencia + hora_ocorrencia ( EXISTE NA TABELA MYSQL,) ENTAO PRECISA SOMENTE EFETUAR A ALTERAÇÃO DOS SEGUINTES CAMPOS SENDO ELES --> evento + resultado + contato --> (PARA cliente+data_ocorrencia+hora_ocorrencia)QUE FORAM ENCONTRADOS NO BANCO.
---------
O PROBLEMA É QUE SÃO IMPORTADOS MAIS DE 50MIL REGISTROS POR TXT, COMO FAZER PARA QUE ISSO NAO FIQUE LENTOOOO DEMAIS.
SEGUE O SCRIPT QUE FAZ A IMPORTAÇÃO.
#########
# UPLOAD DO TXT PRO SERVIDOR.
#########
$NQS_IDENTIFICADOR = substr(uniqid(md5($_FILES["arquivo"]["tmp_name"].time())),0,9);
$NQS = $NQS_IDENTIFICADOR."".$TIPO_DO_ARQUIVO_POSTADO; //NOME DO ARQUIVO
$D_NQS = $_SERVER['DOCUMENT_ROOT']."/info/upload/$pastarquivo/".$NQS;
if(move_uploaded_file($_FILES["arquivo"]["tmp_name"], $D_NQS))
{
//ARQUIVO UPADO, DAMOS A PERMISSAO PARA LEITURA POSTERIOR 777
chmod ($D_NQS, 0777);
//LOCALIZAMOS O TXT NO SERVER
$lines = file($D_NQS);
//IDENTIFICAMOS O TIPO DE TXT NA IMPORTACAO DOS CADASTROS.
if(substr($lines[0],0,18)=="CAD_CLIENTEEVENTOS")
{
//ABRIMOS ARQUIVO NO SERVIDOR PARA LEITURA
$file = fopen($D_NQS,"r");
$imp=1;
while (!feof($file))
{
if ($linha = fgets($file))
{
//IGNORAMOS AS LINHAS Q CONTENHAM "^^"
if ($linha != "^^")
{
$N_LINHA_ARQUIVO = fgets($file,1024); //ARMAZENA DADOS DA LINHA
//SEPARAMOS OS CAMPOS PELO TAMANHO DOS CARACTERES COM SUBSTR
$COD_CLI = substr($N_LINHA_ARQUIVO,0,4); //CODIGO DO CLIENTE 1º CAMPO DO TXT
$DT_EVENTO_CLI = substr($N_LINHA_ARQUIVO,5,10); //DATA 2º CAMPO DO TXT
$HR_EVENTO_CLI = substr($N_LINHA_ARQUIVO,16,8); //HORA 3º CAMPO DO TXT
$COD_EVENTO_CLI = substr($N_LINHA_ARQUIVO,25,7); //CODIGO DO EVENTO 4ºCAMPO TXT
$COD_RESULTADO_CLI = substr($N_LINHA_ARQUIVO,33,2); //CODIGO DO RESULTADO 5ºCAMPO DOTXT
$CONTATO_CLI = substr($N_LINHA_ARQUIVO,36,50); //NOME DO CONTATO 6ºCAMPO DO TXT
//REFORMULAMOS A NOVA DATA
$ANO_NOVADATA_CLI = substr($DT_EVENTO_CLI,6,4); //ANO
$DIA_NOVADATA_CLI = substr($DT_EVENTO_CLI,0,2); //DIA
$MES_NOVADATA_CLI = substr($DT_EVENTO_CLI,3,2); //MES
$NOVA_DATA_CLI = $ANO_NOVADATA_CLI."-".$MES_NOVADATA_CLI."-".$DIA_NOVADATA_CLI;
//**AQUI COMECA O PROBLEMA CONSULTA PRA VERIFICAR SE O REGISTRO JA EXISTE NA BASE DE DADOS PARA NAO REPETIR E SIM ATUALIZAR.
$SQL_REPETIDO = mysql_query("SELECT cliente,data_ocorrencia,hora_ocorrencia FROM $NOME_TABELA_RELATORIOS_EVENTOS WHERE cliente = '".trim($COD_CLI)."' and data_ocorrencia = '".$NOVA_DATA_CLI."' and hora_ocorrencia = '".$HR_EVENTO_CLI."'");
if(mysql_num_rows($SQL_REPETIDO)==1)
{
$SQL_ATUALIZA_EVENTOS = mysql_query("UPDATE $NOME_TABELA_RELATORIOS_EVENTOS SET
evento = '".trim($COD_EVENTO_CLI)."',
resultado = '".trim($COD_RESULTADO_CLI)."',
contato = '".trim($CONTATO_CLI)."'
where cliente = '".trim($COD_CLI)."' and data_ocorrencia = '".$NOVA_DATA_CLI."' and hora_ocorrencia = '".trim($HR_EVENTO_CLI)."'") or print mysql_error();
}
else
{
//INSERINDO DADOS
$SQL_CADASTRA_EVENTOS = mysql_query("INSERT $NOME_TABELA_RELATORIOS_EVENTOS
(
id,
cliente,
data_ocorrencia,
hora_ocorrencia,
evento,
resultado,
contato
)
VALUES
(
'',
'".trim($COD_CLI)."',
'".addslashes(trim($NOVA_DATA_CLI))."',
'".addslashes(trim($HR_EVENTO_CLI))."',
'".addslashes(trim($COD_EVENTO_CLI))."',
'".addslashes(trim($COD_RESULTADO_CLI))."',
'".addslashes(trim($CONTATO_CLI))."'
)
") or print mysql_error();
}
if($SQL_CADASTRA_EVENTOS){
echo alerta("ARQUIVO IMPORTADO COM SUCESSO!");
//chmod ($D_NQS, 0775);
//@unlink($D_NQS);
}
if($SQL_ATUALIZA_EVENTOS)
{
echo alerta("ARQUIVO ATUALIZADO COM SUCESSO!");
//chmod ($D_NQS, 0775);
//@unlink($D_NQS);
}
}
}
$imp++;
} // WHILE
}
else
{
echo alerta("TXT INCORRETO PARA IMPORTAR (HEADER DEVE SER --> CAD_CLIENTEEVENTOS ), VERIFIQUE");
//REMOVEMOS O TXT UPADO POIS ELE FOI IMCOMPATIVEL PARA IMPORTAÇÃO DOS DADOS.
@unlink($D_NQS);
}
}
SERA QUE TEM ALGUEM AI QUE POSSA ME AJUDAR NISSO..
SE POSSÍVEL COMO FAZER PARA MOSTRAR A QUANTIDADE DE DADOS QUE FORAM INSERIDOS E A QUANTIDADE QUE FORAM ATUALIZADO.. MAS ISSO É O DE MENOS O IMPORTANTE É EXECUTAR O SCRIPT DE FORMA RAPIDA.. POIS AS VEZES NEM ATUALIZA NEM INSERE NADA.. POR CAUSA DA LENTIDAO QUE GERA..
DESDE JÁ AGRADEÇO










