Pregunta

Yo soy la creación de un cargador (usando PHP) para mi cliente el que pueden seleccionar un archivo CSV (en un formato predeterminado) en su máquina de carga. El CSV es probable que tenga filas 4000-5000. Php procesará el archivo mediante la lectura de cada línea de la CSV e insertarla directamente en la tabla DB. Esa parte es fácil.

Sin embargo, idealmente antes de añadir estos datos a la tabla de base de datos, me gustaría reseñar 3 de las columnas (A, B, y C) y comprobar para ver si ya tengo un combo coincidencia de esos 3 campos de la mesa y si es así lo prefieren ACTUALIZAR esa fila en lugar de anexar. Si no tengo un combo coincidencia de esos 3 columnas que quiero seguir adelante y insertar la fila, anexar los datos a la tabla.

Lo primero que pensé es que pude hacer las columnas A, B, y C un índice único en mi mesa y luego sólo tiene que insertar cada fila, detectar un 'fracasado' INSERT (debido a la restricción de mi índice único) de alguna manera y luego realizar la actualización. Parece que este método podría ser más eficiente que tener que hacer una consulta SELECT separada para cada fila sólo para ver si tengo un combo juego ya está en mi mesa.

Un tercer enfoque puede ser TODO simplemente añadir, sin usar MySQL índice único y sólo agarrar la última combinación única cuando el cliente después de que consulta la tabla. Sin embargo, yo estoy tratando de evitar tener un montón de datos inútiles en esa tabla.

Pensamientos sobre las mejores prácticas o enfoques inteligentes?

¿Fue útil?

Solución

Si haces las 3 columnas del identificador único, se puede hacer un INSERT con ON llave duplicada.

INSERT INTO table (a,b,c,d,e,f) VALUES (1,2,3,5,6,7)
  ON DUPLICATE KEY UPDATE d=5,e=6,f=7;

Se puede leer más sobre esta técnica útil aquí en el MySQL manual de .

Otros consejos

Si añade un índice único en las (A, B, C) A las columnas, a continuación, puede utilizar SUSTITUIR a hacer esto en una declaración:

SUSTITUIR funciona exactamente igual que INSERT, excepto que si una fila de edad en la tabla tiene el mismo valor que una nueva fila para una PRIMARY KEY o un índice UNIQUE, la vieja fila se elimina antes de la nueva fila es insertado ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top