2010-09-23 56 views
7

Tengo un archivo CSV muy grande (150 MB). ¿Cuál es la mejor manera de importarlo a MySQL? Tengo que hacer algo de manipulación en PHP antes de insertarlo en la tabla MySQL.Importar un gran archivo csv a la base de datos mysql usando php

+0

comprobar mi solución a http://stackoverflow.com/a/22744300/2037323 que incluye algunas comparaciones también –

Respuesta

6

Puede echar un vistazo a LOAD DATA INFILE en MySQL.

Es posible que pueda realizar las manipulaciones una vez que los datos se carguen en MySQL, en lugar de leerlos primero en PHP. Primera tienda de los datos en bruto en una tabla temporal utilizando LOAD DATA INFILE, a continuación, transformar los datos a la tabla de destino mediante una declaración como la siguiente:

INSERT INTO targettable (x, y, z) 
SELECT foo(x), bar(y), z 
FROM temptable 
+0

+ 1 para LOAD DATA INFILE. Si usa phpmyadmin (obviamente PHP :) puede comparar fácilmente varios métodos, el más popular: SELECT INTO y LOAD DATA INFILE con todos sus argumentos y parámetros diferentes. Lo mejor para ti Lo más probable es LOAD DATA INFILE –

+0

Dependiendo de la cantidad de manipulación que tenga que hacer con los datos, podría ser más factible leerlo en php primero e insertar una fila a la vez. Si la cantidad de manipulación es significativa, es más eficiente hacerlo de todos modos en un script y luego tiene dos operaciones. 1. con LOAD DATA INFILE y luego 2. con UPDATE TABLE consultas. – thomasmalt

3

me acaba de abrir con fopen y utilizar fgetcsv para leer cada línea en una matriz. pseudo-php sigue:

mysql_connect(//connect to db); 

$filehandle = fopen("/path/to/file.csv", "r"); 
while (($data = fgetcsv($filehandle, 1000, ",")) !== FALSE) { 
    // $data is an array 
    // do your parsing here and insert into table 
} 

fclose($filehandle) 
Cuestiones relacionadas