【发布时间】:2012-09-21 09:01:36
【问题描述】:
我正在对具有超过 20MM 条目的数据库进行查询,这意味着我将查询分成几个较小的查询。
问题是如果我尝试获取页面未加载的 20MM 条目并收到通知:MySQL 服务器已消失,并显示一个空白屏幕,没有标题和内容。但是,如果我获取 5MM 条目,则页面会正确加载并显示内容:
这是我的代码
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
ini_set('memory_limit', '1000M');
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;
如果有人可以帮助我,我将不胜感激。谢谢
【问题讨论】:
-
如果您只执行没有“craete arrays”部分的查询,您还会收到超时错误吗?
-
真的要set_time_limit 20MM次吗?
-
如果您想获得喜欢的次数,将其作为查询的一部分而不是在 PHP 中执行不是更有效吗?当您可以向 MySQL 询问 COUNT...WHERE... 时,为什么要将所有 20MM 记录带入 PHP?
-
我不知道在 mysql 中执行此操作...我需要按名称和 siplay 分组计数,仅当计数高于 375 时
-
这能回答你的问题吗? Reconnecting on MySQL Server Has Gone Away