Criando relatórios semanais do MySQL

1

Eu tenho um cron script que roda diariamente para LOAD DATA INFILE em um banco de dados MySQL. Eu gostaria de, usando PHP como parte de um aplicativo da web, gerar um relatório semanal mostrando o número total de registros inseridos nos últimos 7 dias.

Eu gostaria de saber a melhor maneira de fazer isso. Corrigir ou modificar o MySQL não é uma opção, e mudar a forma como os dados são inseridos também não é. Eu preferiria evitar contar os arquivos CSV antes de inserir, já que seria confuso ler esses dados no PHP.

Sugestões?

    
por Bill Gray 12.07.2009 / 11:01

3 respostas

1

Deve estar dentro do aplicativo PHP? Dentro do seu script cron, você poderia contar o número de linhas a serem inseridas e adicioná-las a um arquivo de log ou a uma pequena tabela de log dentro do banco de dados mysql (a menos que isso seja o que você quer dizer com modificar o mysql). Eu não tenho certeza, mas eu acho que a função myql row_count () funcionará com os dados INFILE também, então contar os números seria fácil.

E, talvez o método mais simples, se as linhas não forem modificadas após a inserção, você poderia adicionar uma coluna de registro de data e hora ao banco de dados, que é automaticamente definida como a data da inserção e contar os números de uma semana.

    
por 12.07.2009 / 11:31
1

Use a função PHP mysql_info () imediatamente depois de executar sua consulta LOAD DATA INFILE. Isso retornará uma string como:

Records: 1 Deleted: 0 Skipped: 0 Warnings: 0

Veja função php ref: mysql_info () Relacionado seria o função mysql_affected_rows () .

Não importa o que você faça, não dependa da contagem de linhas no SHOW TABLE STATUS. Ele pode ser altamente incorreto, dependendo do seu mecanismo de armazenamento, e é realmente útil apenas para o otimizador de consulta fazer alguns julgamentos melhores sobre otimizações. Isso está documentado em SHOW TABLE STATUS (com a seção específica citada aqui )

Rows

The number of rows. Some storage engines, such as MyISAM, store the exact count. For other storage engines, such as InnoDB, this value is an approximation, and may vary from the actual value by as much as 40 to 50%. In such cases, use SELECT COUNT(*) to obtain an accurate count.

The Rows value is NULL for tables in the INFORMATION_SCHEMA database.

    
por 16.07.2009 / 22:45
0

Se tudo o que você tem interesse é no número de linhas em esquemas e tabelas específicos (e supondo que não há exclusões de linhas), você pode usar o comando show table status ou a linha de comando use mysqlshow --status dbname . Isso listará para cada tabela no esquema algumas informações estendidas, incluindo contagens de linha (ou você pode usar like para selecionar tabelas específicas).

Os mesmos dados podem ser recuperados usando SQL simples do banco de dados INFORMATION_SCHEMA, talvez assim:

SELECT Table_name, SUM (Table_rows) FROM INFORMATION_SCHEMA.PARTITIONS ONDE TABLE_NAME está em ('table1', 'table2');

Você pode criar uma tarefa cron simples que faça este instantâneo uma vez por dia e, em seguida, deve ser bastante fácil extrair esses dados de uma forma útil do PHP. Heck, você pode até armazená-lo em uma tabela de banco de dados; -)

    
por 12.07.2009 / 11:31

Tags