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 サーバーが離れました

4

2 に答える 2

1

その理由は、MySQL が結果を探してインデックスを処理している間、ページが空白になるためです。しばらくすると、タイムアウトになります (設定によって異なります)。そのため、これは小さなクエリでは発生しません。

于 2012-09-29T23:02:49.427 に答える
1

これは、php スクリプトの実行時間制限によるものです。デフォルトでは、php スクリプトは合計 45 秒間実行されてからタイムアウトします...

後はこれを使うだけ<?php

set_time_limit(0); // 0 means unlimited
  • データベースとphpコードロジックの両方でロジックを改善することをお勧めします。

編集:

具体的には、次のようにして、このファイルのエラー ログを設定してみてください。

ini_set("log_errors" , "1");
ini_set("error_log" , "eorrors.txt");
ini_set("display_errors" , "0");
于 2012-09-29T23:06:37.127 に答える