Создание еженедельных отчетов MySQL

Создание еженедельных отчетов MySQL

У меня есть скрипт cron, который запускается ежедневно для ЗАГРУЗКИ ДАННЫХ INFILE в базу данных MySQL. Я хотел бы, используя PHP как часть веб-приложения, генерировать еженедельный отчет, показывающий общее количество вставленных записей за последние 7 дней.

Я хотел бы узнать, как лучше всего это сделать. Патчирование или модификация MySQL невозможны, как и изменение способа вставки данных. Я бы предпочел избежать подсчета CSV-файлов перед вставкой, так как было бы неудобно читать эти данные обратно в PHP.

Предложения?

решение1

Должно ли это быть внутри приложения PHP? Внутри вашего скрипта cron вы можете подсчитать количество строк для вставки и добавить их либо в файл журнала, либо в небольшую таблицу журнала внутри базы данных mysql (если только это не то, что вы имеете в виду под изменением mysql). Я не уверен, но предполагаю, что функция myql row_count() также будет работать с данными INFILE, поэтому подсчет чисел будет простым.

И, возможно, самый простой метод, если строки не изменяются после вставки, вы можете добавить столбец временной метки в базу данных, который автоматически устанавливается на дату вставки и подсчитывает числа за неделю.

решение2

Используйте функцию PHP mysql_info() сразу после выполнения запроса LOAD DATA INFILE. Это вернет строку вида:

Записи: 1 Удалено: 0 Пропущено: 0 Предупреждения: 0

Видетьссылка на функцию php: mysql_info() Связано это будетmysql_affected_rows()функция.

Что бы вы ни делали, не полагайтесь на количество строк в SHOW TABLE STATUS. Оно может быть совершенно неверным в зависимости от вашего движка хранения и на самом деле полезно только для оптимизатора запросов, чтобы он мог принимать более точные решения по оптимизации. Это задокументировано вПОКАЗАТЬ СТАТУС ТАБЛИЦЫ(с указанием конкретного раздела здесь)

Ряды

Количество строк. Некоторые системы хранения, такие как MyISAM, хранят точное количество. Для других систем хранения, таких как InnoDB, это значение является приблизительным и может отличаться от фактического значения на 40–50%. В таких случаях используйте SELECT COUNT(*) для получения точного количества.

Значение Rows равно NULL для таблиц в базе данных INFORMATION_SCHEMA.

решение3

Если вас интересует только количество строк в определенных схемах и таблицах (и при условии, что нет удалений строк), то вы можете использовать команду MySQL show table statusили из командной строки использовать mysqlshow --status dbname. Это выведет для каждой таблицы в схеме некоторую расширенную информацию, включая количество строк (или вы можете использовать , likeчтобы выбрать определенные таблицы).

Те же данные можно получить с помощью простого SQL из базы данных INFORMATION_SCHEMA, например, так:

SELECT Table_name,SUM(Table_rows) FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME in ('table1','table2');

Вы можете создать простую задачу cron, которая будет делать этот снимок раз в день, а затем будет довольно легко извлечь эти данные полезным способом из PHP. Черт, вы даже можете сохранить их в таблице базы данных ;-)

Связанный контент