Tengo dos tablas, la primera de ellas llamada "eventos", la cual una vez llena debera mantener en todo momento un promedio de 600,000 registros. La segunda llamada "facturados" la cual manejara un promedio de 60,000 y es alimentada tomando los datos de la primera y moviendolos a la segunda. Su tamaño no varia mucho ya que cada mes deberan vaciarse y volver a empezar. La forma de alimentar a la primera es un archivo de excel en formato xls, esto no lo puedo cambiar y debe ser forsozamente asi, para ello implemente un pequeño codigo con PHPExcel:
Código PHP:
$objReader = new PHPExcel_Reader_Excel5();
$objPHPExcel = $objReader->load($_FILES['Archivo']['tmp_name']);
$sheetData = $objPHPExcel->getActiveSheet()->toArray(true,false,true,false);
for($fila=1;$fila<count($sheetData);$fila++)
{
$Folio=$sheetData[$fila][0];
$Tarifa=$sheetData[$fila][1];
$FechaHora=$sheetData[$fila][2];
$Carril=$sheetData[$fila][3];
dbinsert("insert into tempevent (Folio,Tarifa,FechaHora,Carril) values ('$Folio','$Tarifa','$FechaHora','$Carril')");
}
El contenido del archivo lo subo a una tabla temporal llamda tempevent, despues de eso elimino de esa tabla temporal los registros duplicados existentes ya en las otras dos con el siguiente codigo sql:
Se elimina el contenido ya existente en la primera tabla:
Código PHP:
DELETE FROM tempevent WHERE Folio IN (SELECT Folio FROM eventos) AND Tarifa IN (SELECT Tarifa FROM eventos) AND FechaHora IN (SELECT FechaHora FROM eventos) AND Carril IN (SELECT Carril FROM eventos)
Código PHP:
DELETE FROM tempevent WHERE Folio IN (SELECT Folio FROM facturados) AND Tarifa IN (SELECT Tarifa FROM facturados) AND FechaHora IN (SELECT FechaHora FROM facturados) AND Carril IN (SELECT Carril FROM facturados)
Código PHP:
insert into eventos (Folio,Tarifa,FechaHora,Carril) (select Folio,Tarifa,FechaHora,Carril from tempevent)
Para aclarar mas la informacion, ningun dato es unico en la tabla eventos, todos se pueden repetir pero no en conjunto los cuatro campos: Folio,Tarifa,FechaHora,Carril por lo cual el indice son los cuatro. Un detalle mas, tal vez no sea la mejor forma de hacer pero funciona.
Agradezco de antemano sus comentarios y gracias por leer