Como parte de un proyecto PHP, tengo que insertar una fila en una base de datos MySQL. Obviamente estoy acostumbrado a hacer esto, pero esto requería insertarlo en 90 columnas en una consulta. La consulta resultante se ve horrible y monolítica (especialmente insertando mis variables PHP como los valores):
INSERT INTO mytable (column1, colum2, ..., column90)
VALUES
('value1', 'value2', ..., 'value90')
y me preocupa no hacer esto de la manera correcta. También me tomó mucho tiempo (aburrido) escribir todo y probar escribir el código de prueba será igualmente tedioso, me temo.
¿Cómo hacen los profesionales para escribir y probar rápidamente estas consultas? ¿Hay alguna manera de acelerar el proceso?
php
mysql
efficiency
Joe
fuente
fuente
Respuestas:
Joe, tu último comentario explicó mucho. Creo que el verdadero problema es el diseño de datos. Es posible que se necesiten nuevas columnas cuando cambie el formato del documento y, en mi experiencia, los formatos de los documentos tienden a cambiar con frecuencia. En lugar de una tabla de 90 columnas, con una sola fila por informe, almacenaría los datos del informe en una tabla con cuatro columnas: report_id, format_id, field_name, field_value. Cada informe estaría representado por 90 filas, una para cada valor de campo en el informe. Esto debería simplificar su código considerablemente.
fuente
En general, la forma más rápida de cargar un gran conjunto de datos en una base de datos SQL es usar la interfaz nativa de carga masiva. Que yo sepa, cada dbms SQL tiene al menos uno.
Documentos de MySQL: uso del cargador masivo
Si tengo que convertir un archivo delimitado por tabulaciones o comas en instrucciones SQL INSERT, utilizo awk para leer el archivo de entrada y escribir el archivo de salida. No hay nada realmente especial en awk; Resulta que es el lenguaje de procesamiento de texto que mejor conozco. Puede obtener los mismos resultados escribiendo código en Perl, Python, Ruby, Rexx, Lisp, etc.
fuente
Si puede obtener fácilmente los nombres de las columnas en una hoja de cálculo de Excel, podría escribir macros de Excel para generar código para varias consultas y declaraciones DML, luego simplemente pegue los valores en otra columna y su declaración de inserción / actualización se creará automáticamente. Escribir manualmente es una forma muy lenta de hacerlo, así que mira si puedes encontrar trucos usando tus herramientas existentes. Muchos editores de texto orientados al desarrollador también tienen la capacidad de grabar y almacenar macros para hacer que los trabajos repetitivos como este sean mucho más rápidos y fáciles.
fuente
Si tiene un archivo csv, puede usar LOAD DATA INFILE ... para importar los datos.
Si tiene que usar consultas 'INSERTAR', hacer inserciones masivas acelerará el proceso. En lugar de ejecutar una consulta 'INSERTAR' para cada fila, agrupe las filas, diga 100 y ejecute la consulta. Algo como esto:
fuente
Una manera eficiente de escribir datos de consulta de varias columnas en MySQL DB es convertir estos datos en formato JSON o YAML e insertarlos como una sola unidad. Cambia "escribir una inserción para una tabla con 90 columnas" en "escribir una inserción en una tabla con una columna".
En este enfoque, no todo se debe dividir en sus componentes básicos, y el dato único se almacena solo en 1 columna.
fuente
Con MySQL puede usar una sintaxis alternativa para las
insert
declaraciones:fuente
Su escenario se ve muy bien para una solución NoSQL, ya que la lista de atributos puede cambiar en cualquier momento que cambie el formato. ¿Ha evaluado otras opciones además de MySQL? Cava alrededor de DynamoDB / MongoDB / Cassandra, eso podría ser una mejor opción.
fuente
Hay una forma más eficiente de insertar datos en la base de datos usando php y mysql. Podemos usar LOAD COMMAND para insertar los datos. Inserta datos notablemente rápido.
Para esto, cree un archivo plano (por ejemplo, utilicé el archivo .csv) con sus datos utilizando la
fputcsv()
función. Luego inserte los datos usando el comando LOAD. Sintaxis algo similar a la siguiente:fuente
Intenta lo siguiente. Trabajó para mi.
Los nombres de los formularios deben ser iguales a los nombres de las columnas de la base de datos.
Obtenga los valores de la siguiente manera:
Primero deberá insertar una ID antes del bucle foreach. puedes obtener la siguiente identificación haciendo:
agregue 1 al id e insértelo.
fuente