2009-07-02 266 views
1

我有一個csv文件,它每週生成並加載到mysql數據庫中。我需要做一份報告,其中將包括關於所導入記錄的各種統計數據。第一個這樣的統計數據是導入了多少記錄。生成mysql統計信息

我使用PHP來與數據庫接口,並將使用PHP來生成一個顯示此類統計信息的頁面。

但是,csv文件是通過mysql腳本導入的,與任何PHP都完全分開。

是否有可能來計算已導入的記錄,保存一些其他的方式在不同的領域/表中的號碼,或?

添加額外timefield制定出因爲在一定的時間添加的字段是不可能的,作爲數據庫的結構不能改變。

是從PHP中有一個查詢,而從MySQL腳本,或者更好的方式來產生輸入我可以使用/計數的進口記錄數?

+0

你可以在得到澄清進口的行數這個mysql腳本部分?在cron jab中調用腳本的語言是什麼? (shell腳本,perl,蟒蛇等...) – Jason 2009-07-03 02:08:04

+0

它只是一個文本文件與SQL命令被饋入MySQL ... mysql -uuser -ppass 2009-07-03 16:51:38

回答

1

您可以使用以下查詢獲取表中的記錄數。

SELECT COUNT(*) FROM tablename 

所以你可以做的是,你可以在導入前和導入後計算的記錄數,然後選擇像這樣的差異。

$before_count = mysql_fetch_assoc(mysql_query("SELECT COUNT(*) AS c FROM tablename")); 
// Run mysql script 
$after_count = mysql_fetch_assoc(mysql_query("SELECT COUNT(*) AS c FROM tablename")); 
$records_imported = $after_count['c'] - $before_count['c']; 

你可以做到這一切從MySQL腳本,如果你想,但我想用PHP做它原來更乾淨一點。

+0

我不能集成該MySQL和PHP腳本,因爲mysql腳本來自cron作業和web應用程序中的php腳本。我怎麼能只在SQL腳本中做到這一點? – 2009-07-03 00:48:37

0

有點桶式刮板,但取決於權限,您可以編輯cron執行的MySQL腳本,使用INTO OUTFILE將一些預更新統計信息輸出到文件中,然後用PHP解析結果文件。然後,您將擁有「之前」統計信息,並可以通過PHP執行統計信息查詢以獲取「之後」統計信息。

但是,與其中許多解決方案一樣,使用此解決方案几乎無法找到現有行的更新。 (雖然新行應該是微不足道的檢測。)

0

不能確定你以後在做什麼,但這裏有更詳細一點:

  1. 讓MySQL使用相關的統計數據導出到一個已知目錄
    SELECT ... INTO OUTFILE .. 該目錄將需要由MySQL
    用戶/組和Web服務器的用戶/組(或任何用戶/組
    是可讀/寫,如果你你正在運行PHPas '將通過cron自動化cli
    每週。該文件應採用CSV格式並以日期戳記
    「stats_export_YYYYMMDD.csv」。

  2. 讓PHP掃描出口目錄開始
    「stats_export_」,也許用「SCANDIR」功能,用一個簡單的
    SUBSTR測試文件。然後可以將匹配的文件名添加到數組中。一旦
    您用完文件,對數組進行排序以確保它的日期順序。

  3. 使用fgetcsv從
    轉中讀取數組中列出的每個文件的統計數據。將這些數據放入一個乾淨的
    數組中也是明智的,該數組還包含從
    文件名中提取的相關日期戳。

  4. 此時您將在數組中的每個
    天結束時統計數據的摘要。然後您可以直接從PHP執行相關統計SQL查詢
    (如果需要),並將數據添加到數據
    數組中。

  5. 根據需要進行比較/對比和輸出。

0

負載使用PHP和 'LOAD DATA INFILE .... INTO TABLE ..',然後將文件使用mysqli_affected_rows()(或mysql_affected_rows)