En mi trabajo existe un sistema antiguo hecho en entorno DOS y que utiliza tablas DBF. Me encargaron hacer varias aplicaciones web para cada área y que utilice estas tablas como fuente de datos. Cuando empecé con las primeras aplicaciones no tenía ningún inconveniente con exportarlas a CSV y cargar los datos de manera manual, pero cada vez son más las aplicaciones web implementadas que ya no puedo usar la migración manual, así que ahora uso el script PHP que figura en la documentación de PHP y que creo que la mayoría usa para este caso. Todo iba bien hasta que me topé con una tabla que tiene más de 2 millones de registros. El script funciona igual para 1 registro o para muchísimos registros, pero la eficiencia de la aplicación decae debido al tiempo que consume. Otro problema es que durante la migración de DBF a MySQL el script no distingue entre registros válidos y los marcados como eliminados lo que hace que importe todos los registros sin excepción.
Mi consulta es, alguien puede darme una idea de cómo hacer una consulta previa a la tabla DBF y sólo lo que genere esa consulta pasarla a MySQL??
Este es el script que uso para migrar de DBF a MySQL:
Código:
<?php ini_set('max_execution_time', 300); require_once('conexion.php'); // Abrir en modo lectura y escritura porque se va a realizar todos los días $ruta = './tmp/casos.dbf'; $db = dbase_open($ruta, 2); // Vaciamos la tabla fm_medic $sql_p = "TRUNCATE TABLE su_karde"; $res_p = mysql_query($sql_p) or die(mysql_error()); $sql_q = "TRUNCATE TABLE tab_consumo"; $res_q = mysql_query($sql_q) or die(mysql_error()); if ($db) { $numero_registros = dbase_numrecords($db); // procesar cada uno de los registros for ($i = 1; $i <= $numero_registros; $i++) { $fila = dbase_get_record_with_names($db, $i); //asignar cada variable del arreglo fila a una variable individual; $KA_CMATERI = $fila['KA_CMATERI']; $KA_TIPO = $fila['KA_TIPO']; $KA_CANTID = $fila['KA_CANTID']; $KA_FECHA = $fila['KA_FECHA']; $KA_PREVEN = $fila['KA_PREVEN']; $KA_CSER = $fila['KA_CSER']; $sql = "INSERT INTO su_karde VALUES ('".$KA_CMATERI."','".$KA_TIPO."','".$KA_CANTID."','".$KA_FECHA."','".$KA_PREVEN."','".$KA_CSER."')"; $res = mysql_query($sql) or die(mysql_error()); } $sql_t = "SELECT *,(KA_CANTID*KA_PREVEN) AS precio,MONTH(KA_FECHA) AS mes,YEAR(KA_FECHA) AS anno FROM su_karde WHERE KA_CMATERI is NOT null AND YEAR(KA_FECHA)=2014 AND KA_CSER='ARC' GROUP BY KA_CMATERI,mes"; $res_t = mysql_query($sql_t) or die(mysql_error()); while ($fila_t = mysql_fetch_array($res_t)) { $sql_f = "INSERT INTO tab_consumo VALUES (null,'".$fila_t['KA_CMATERI']."','".$fila_t['KA_CANTID']."','".$fila_t['precio']."','".$fila_t['mes']."','".$fila_t['anno']."')"; $res_f = mysql_query($sql_f) or die(mysql_error()); } } else { echo 'No se pudo abrir la tabla'; } ?>