Tengo un script cron que se ejecuta diariamente para CARGAR ARCHIVOS DE DATOS en una base de datos MySQL. Me gustaría, utilizando PHP como parte de una aplicación web, generar un informe semanal que muestre el número total de registros insertados en los últimos 7 días.
Me gustaría saber la mejor manera de hacer esto. Parchar o modificar MySQL no es una opción, y cambiar la forma en que se insertan los datos tampoco lo es. Preferiría evitar contar los archivos CSV antes de insertarlos, ya que sería complicado leer estos datos nuevamente en PHP.
¿Sugerencias?
Respuesta1
¿Debe estar dentro de la aplicación PHP? Dentro de su secuencia de comandos cron, puede contar el número de filas a insertar y agregarlas a un archivo de registro o a una pequeña tabla de registro dentro de la base de datos mysql (a menos que eso sea lo que quiere decir con modificar mysql). No estoy seguro, pero supongo que la función myql row_count() también funcionará con datos INFILE, por lo que contar los números sería fácil.
Y, tal vez el método más simple, si las filas no se modifican después de la inserción, puede agregar una columna de marca de tiempo a la base de datos, que se configura automáticamente en la fecha de la inserción y cuenta() los números durante una semana.
Respuesta2
Utilice la función PHP mysql_info() inmediatamente después de haber ejecutado su consulta LOAD DATA INFILE. Esto devolverá una cadena como:
Registros: 1 Eliminados: 0 Omitidos: 0 Advertencias: 0
Verreferencia de función php: mysql_info() Relacionado sería elmysql_affected_rows()función.
Hagas lo que hagas, no dependas del recuento de filas en MOSTRAR ESTADO DE LA TABLA. Puede ser tremendamente incorrecto dependiendo de su motor de almacenamiento y en realidad solo es útil para que el optimizador de consultas pueda tomar mejores decisiones sobre las optimizaciones. Esto está documentado enMOSTRAR ESTADO DE LA TABLA(con la sección específica citada aquí)
Filas
El número de filas. Algunos motores de almacenamiento, como MyISAM, almacenan el recuento exacto. Para otros motores de almacenamiento, como InnoDB, este valor es una aproximación y puede variar del valor real entre un 40 y un 50 %. En tales casos, utilice SELECT COUNT(*) para obtener un recuento preciso.
El valor de Filas es NULL para las tablas de la base de datos INFORMACIÓN_SCHEMA.
Respuesta3
Si lo único que le interesa es el número de filas en esquemas y tablas específicos (y asumiendo que no hay eliminaciones de filas), entonces puede usar el comando MySQL show table status
o desde la línea de comando usar mysqlshow --status dbname
. Esto enumerará para cada tabla en el esquema información ampliada, incluido el recuento de filas (o puede usarla like
para seleccionar tablas específicas).
Los mismos datos se pueden recuperar usando SQL simple de la base de datos INFORMACIÓN_SCHEMA, tal vez así:
SELECCIONE Nombre_tabla, SUMA (filas_tabla) DE INFORMACIÓN_ESQUEMA.PARTICIONES DONDE NOMBRE_TABLA en ('tabla1', 'tabla2');
Puede crear un trabajo cron simple que tome esta instantánea una vez al día y luego debería ser bastante fácil extraer esos datos de una manera útil desde PHP. Diablos, incluso puedes almacenarlo en una tabla de base de datos ;-)