2013-05-30 65 views
0

所以我的情況如下。我每24小時通過PHP從某個源獲取數據。現在在這段時間內,這些數據發生了變化,新的數據被添加或者一些被更新。現在,當我每24小時運行一次查詢來插入或更新這些數據時,查詢執行需要很長時間。如果執行時間適中,這將不會成爲問題,因爲我打算將此作爲cron作業,但現在執行時間太高。 因此,當我獲得它時,我正在考慮將這些數據從PHP寫入CSV文件。然後將這個CSV文件與MySQL LOAD DATA函數一起使用,該函數可以非常快速地從文件中插入大量數據。使用PHP插入大量數據到MySQL

因此,問題是有可能從PHP寫入CSV文件,並以適合LOAD DATA INFILE函數的方式進行格式化,我如何每隔24小時刪除該CSV並使用新插入的數據創建一個新文件,以及如何正確使用此CSV文件的LOAD DATA INFILE函數?噢,我可以做出所有這些工作嗎?謝謝。

+0

您是否嘗試過使用批量插入?一個查詢中的多個插入比每個查詢中的一個插入更快。請參見[http://stackoverflow.com/a/780046/1057527](http://stackoverflow.com/a/780046/1057527) – machineaddict

+0

這是正確的過程,實際上您描述了完成此任務的正確方法。所以簡短的回答是:是的。 – bodi0

+0

批量插入不會幫助我在這裏。 – Emcho

回答

0

假設你從源接收數據,並準備這個數組:

$x=array(1=>array('1','2','3','4'), 2=>array('5','6','7','8')); 

創建一個CSV文件是這樣的:

$file=fopen(<DIRECTORY_PATH>."file.csv","w"); 
    if(!$file){ 
     //error 
    } 

    $csv_data=""; 

    foreach($x as $row){ 
    foreach($row as $element){ 
     $csv_data.=$element.", "; 
    } 
    //remove the last comma 
    $csv_data.="\n"; 

    } 

    fwrite($file,$csv_data); 

$query="load data infile '".<DIRECTORY_PATH>."file.csv"."' into table your_table"; 
if(!mysqli->query($query)) 
printf("Error: %s\n", $mysqli->error); 
+0

我會試試這個謝謝。 – Emcho

0

正如你可以閱讀LOAD DATA聲明其非常靈活,你可以指定字段,行分隔符和許多其他功能。這將允許您以任何格式製作您的csv。 LOAD DATA確實是在mysql中插入數據的最快方式。

在php中,您可以非常簡單地將數據寫入文件here

之後確實你需要一個cron作業,它將加載mysql中的文件,this應該是有幫助的。