Foros del Web » Programando para Internet » PHP »

sobre multiples insert/update desde un .csv

Estas en el tema de sobre multiples insert/update desde un .csv en el foro de PHP en Foros del Web. Hola, a los mas experimentados tengo el siguiente escenario y busco la forma optima de resolverlo: Estoy diseñando un pequeño sistema en donde una de ...
  #1 (permalink)  
Antiguo 06/06/2012, 12:15
Avatar de patriciomase  
Fecha de Ingreso: abril-2012
Ubicación: Mar del Plata
Mensajes: 323
Antigüedad: 12 años
Puntos: 34
sobre multiples insert/update desde un .csv

Hola, a los mas experimentados tengo el siguiente escenario y busco la forma optima de resolverlo:

Estoy diseñando un pequeño sistema en donde una de las opciones permite exportar cierta tabla (puede ser cualquier tabla) o parte de la tabla a un archivo csv, que el usuario guarda en su disco para modificarlo.

El asunto es cuando quiero volver a cargar los datos desde el csv (el usuario puede haber agregado, modificado o eliminado filas) como proceder para hacer la actualización de forma optima?

se me ocurrió usar "load data local infile", pero el server no me lo soporta, y quiero hacer el sistema lo mas genérico posible, que ande en cualquier lado.

se me ocurre hacer un bucle que recorra cada linea del csv y vaya actualizando si existe o sino agregar. pero sería un número gigante de conexiones y desconexiones y consultas, me parece demasiado costoso...

alguien lidió con algo parecido?
  #2 (permalink)  
Antiguo 06/06/2012, 12:20
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: sobre multiples insert/update desde un .csv

Lo del número gigante de conexiones no tiene sentido, puedes hacer una sola conexión para todo el proceso. Si tienes un campo que pueda ser usado como clave, es decir que no pueda repetirse, puedes indicar ese campo como primary key, de forma que optimizaría mucho cuando insertes los datos para que los datos repetidos lo ignore o bien los actualice según necesites.

Otra forma es si manejas fechas, borra de la bd todo lo que tenga una fecha igual o mayor a la fecha mínima de tu proceso, y a partir de ahí sólo insertar.
  #3 (permalink)  
Antiguo 06/06/2012, 12:31
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: sobre multiples insert/update desde un .csv

Yo lo tengo montado tal y como describes: desde backend, se puede exportor e importar cualquier tabla. Y el restaurar lo hago con un bucle.
La verdad, no se me ocurre ninguna otra manera. Más si das opciones de importación: (pongo 'o' coma buttons...)

o borrar tabla antes de importar
o modificar existentes
o borrar los no actualizados
o .......

Saludos.
  #4 (permalink)  
Antiguo 06/06/2012, 12:39
Avatar de patriciomase  
Fecha de Ingreso: abril-2012
Ubicación: Mar del Plata
Mensajes: 323
Antigüedad: 12 años
Puntos: 34
Respuesta: sobre multiples insert/update desde un .csv

si tengo un campo id obviamente.
te parece que armar una consulta así para cada fila del csv es viable: (la consulta se genera dinámicamente, pongo a modo de ejemplo lo que planeo usar):

INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;

y si son 10000 filas? o 100000? no existe una manera de hacerlo todo de una, sin iterar?? eso quería saber
  #5 (permalink)  
Antiguo 06/06/2012, 12:40
Avatar de patriciomase  
Fecha de Ingreso: abril-2012
Ubicación: Mar del Plata
Mensajes: 323
Antigüedad: 12 años
Puntos: 34
Respuesta: sobre multiples insert/update desde un .csv

bueno gracias. voy a iterar entonces y ver que pasa
  #6 (permalink)  
Antiguo 06/06/2012, 12:43
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: sobre multiples insert/update desde un .csv

No me refiero a un campo ID, aunque puede servir.

Puesto que tienes un archivo .csv, no veo como podrías, sin iterar, insertar o actualizar todas las líneas.

Yo hago esto con un archivo de más de un millón de registros (importa las series de los almacenes de toda una empresa) y el proceso tarda unos 30 minutos. Claro, esto depende del servidor, sin embargo, regresando a tu pregunta, no veo cómo podrías hacerlo sin iteraciones.
  #7 (permalink)  
Antiguo 06/06/2012, 13:08
Avatar de patriciomase  
Fecha de Ingreso: abril-2012
Ubicación: Mar del Plata
Mensajes: 323
Antigüedad: 12 años
Puntos: 34
Respuesta: sobre multiples insert/update desde un .csv

desde la consola de mysql hay un comando que es asi:

load data infile 'archivo' replace into 'tabla' .. ;

que importa un archivo csv o txt o lo que sea directamente, se lo manda al motor y que se arregle.

Buscaba algo similar a eso, pero veo que recorrer una a una las filas del csv no es tan costoso como pensaba!! Gracias!! a ver como me va con eso

Etiquetas: insert, multiples, update
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:48.