建立每週 MySQL 報告

建立每週 MySQL 報告

我有一個 cron 腳本,每天運行以將 DATA INFILE 載入到 MySQL 資料庫中。我想使用 PHP 作為 Web 應用程式的一部分,產生每週報告,顯示過去 7 天插入的記錄總數。

我想知道解決這個問題的最佳方法。修補或修改 MySQL 不是選項,更改資料插入方式也不是選項。我寧願避免在插入之前對 CSV 檔案進行計數,因為將這些資料讀入 PHP 會很混亂。

建議?

答案1

它必須在 PHP 應用程式內部嗎?在你的 cron 腳本中,你可以計算要插入的行數,並將它們加到日誌檔案或 mysql 資料庫內的小日誌表中(除非這就是你修改 mysql 的意思)。我不確定,但我猜 mysql 函數 row_count() 也可以處理 INFILE 數據,所以計算數字會很容易。

而且,也許是最簡單的方法,如果插入後未修改行,您可以向資料庫添加一個時間戳列,該列會自動設定為插入日期並 count() 增加一周的數字。

答案2

執行 LOAD DATA INFILE 查詢後立即使用 PHP mysql_info() 函數。這將返回一個類似的字串:

記錄:1 刪除:0 跳過:0 警告:0

PHP 函數參考:mysql_info() 相關的是mysql_affected_rows()功能。

無論您做什麼,都不要依賴 SHOW TABLE STATUS 中的行數。根據您的儲存引擎,它可能非常不正確,並且實際上僅對查詢優化器對優化做出更好的判斷有用。這記錄在顯示表狀態(此處引用了具體部分)

行數

行數。某些儲存引擎(例如 MyISAM)儲存精確的計數。對於其他儲存引擎,例如 InnoDB,該值是一個近似值,可能與實際值相差 40% 到 50%。在這種情況下,請使用 SELECT COUNT(*) 來取得準確的計數。

對於 INFORMATION_SCHEMA 資料庫中的表,行值為 NULL。

答案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 中提取該資料應該相當容易。哎呀,您甚至可以將其儲存在資料庫表中;-)

相關內容