2012-09-29 37 views
0

我正在對超過20MM條目的數據庫進行查詢,這意味着即時將查詢分解爲幾個較小的查詢。帶大循環的空白頁面

問題是如果我嘗試獲取頁面無法加載的20MM條目,並顯示一個空白屏幕,沒有標題和內容。不過,如果我取5MM項,頁面不會正確加載,並顯示內容:

這裏是我的代碼

for($n=0; $n<20000000; $n=$n+500000){ 
    $m=500000; 
$query = "SELECT * FROM user_likes LIMIT ". $n .",". $m; 
//echo $query; 
$result = mysql_query($query) or die(mysql_error()); 

// craete arrays 
while($row = mysql_fetch_array($result)){ 
    set_time_limit(0); 
    $like[$row['name']]=$like[$row['name']]+1; 
    if($like[$row['name']]==375) $likes375 ++; 

} 


} 

// print the size 
echo count($like)."<br>"; 
echo "375: ".$likes375; 

我將不勝感激,如果有人能幫助我。 感謝

編輯:

加入error_reporting(E_ALL);後,顯示此通知:MySQL服務器已消失

回答

1

的原因是因爲在MySQL是搗弄通過其索引中查找你的頁面是空白爲您的結果。一段時間後,這將超時(取決於您的設置)。這就是爲什麼這不會發生在較小的查詢上。

+0

實際上查詢是相同尺寸的,都是500.000行。然而,在一種情況下,我運行20次查詢,爲10MM行,在其他我運行40次,爲20MM行 –

1

這是由於PHP腳本的執行時間限制,默認情況下PHP腳本將總共45秒超時前運行......

剛過<?php

set_time_limit(0); // 0 means unlimited 
    使用
  • 但它不建議使用它,更好地改善你的邏輯在數據庫和php代碼邏輯。

編輯:

嘗試specificaly通過這樣設置錯誤日誌文件:

ini_set("log_errors" , "1"); 
ini_set("error_log" , "eorrors.txt"); 
ini_set("display_errors" , "0"); 
+0

實際上,我設置每個循環的無限秒 –

+0

是的,如果腳本旨在交互使用,您應該可能考慮使用某種分頁方式,而不是增加超時時間。如果它只是作爲一次性運行,那麼調整超時應該沒有什麼問題。 – Will

+0

其打算只使用一次檢索信息,而不是交互式 –