Criando relatórios semanais do MySQL

Criando relatórios semanais do MySQL

Eu tenho um script cron que é executado diariamente para LOAD DATA INFILE em um banco de dados MySQL. Gostaria, usando PHP como parte de uma aplicação web, gerar um relatório semanal mostrando o número total de registros inseridos nos últimos 7 dias.

Gostaria de saber a melhor maneira de fazer isso. Aplicar patches ou modificar o MySQL não é uma opção, e alterar a forma como os dados são inseridos também não é. Eu preferiria evitar contar os arquivos CSV antes de inserir, pois seria complicado ler esses dados no PHP.

Sugestões?

Responder1

Deve estar dentro do aplicativo PHP? Dentro do seu script cron, você pode 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 seja isso que você quer dizer com a modificação do mysql). Não tenho certeza, mas acho que a função myql row_count() também funcionará com dados INFILE, portanto, 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ê pode adicionar uma coluna de carimbo de data/hora ao banco de dados, que é automaticamente definida para a data da inserção e contar() os números por uma semana.

Responder2

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

Registros: 1 Excluído: 0 Ignorado: 0 Avisos: 0

Verreferência da função php: mysql_info() Relacionado estaria omysql_affected_rows()função.

Faça o que fizer, não dependa da contagem de linhas em SHOW TABLE STATUS. Pode ser totalmente incorreto dependendo do seu mecanismo de armazenamento e é realmente útil apenas para o otimizador de consulta fazer alguns julgamentos melhores sobre as otimizações. Isto está documentado emMOSTRAR STATUS DA TABELA(com a seção específica citada aqui)

Linhas

O número de linhas. Alguns mecanismos de armazenamento, como MyISAM, armazenam a contagem exata. Para outros mecanismos de armazenamento, como o InnoDB, esse valor é uma aproximação e pode variar do valor real em até 40 a 50%. Nesses casos, use SELECT COUNT(*) para obter uma contagem precisa.

O valor Rows é NULL para tabelas no banco de dados INFORMATION_SCHEMA.

Responder3

Se tudo o que você está interessado é no número de linhas em esquemas e tabelas específicos (e assumindo que não há exclusões de linhas), então você pode usar o comando MySQL show table statusou na linha de comando use mysqlshow --status dbname. Isso listará para cada tabela no esquema algumas informações estendidas, incluindo contagens de linhas (ou você pode usar likepara 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 WHERE TABLE_NAME in ('table1','table2');

Você pode criar um cron job simples que tira esse instantâneo uma vez por dia e então deve ser bastante fácil extrair esses dados de uma forma útil do PHP. Caramba, você pode até armazená-lo em uma tabela de banco de dados ;-)

informação relacionada