在这里寻找一些想法......我有一个MySQL表,里面有100K行的测试数据。
我正在使用PHP脚本从该表中获取行,在此测试用例中,脚本将获取所有100,000行(对大型数据集进行一些分析和优化)。
我连接到数据库,并执行一个无缓冲的查询:
$result = mysql_unbuffered_query("SELECT * FROM TestTable", $connection) or die('Errant query: ' . $query);
然后我用以下方法迭代结果:
if ($result) {
while($tweet = mysql_fetch_assoc($result)) {
$ctr++;
if ($ctr > $kMAX_RECORDS) {
$masterCount += $ctr;
processResults($results);
$results = array();
$ctr = 1;
}
$results[] = array('tweet' => $tweet);
}
echo "<p/>FINISHED GATHERING RESULTS";
}
function processResults($resultSet) {
echo "<br/>PROCESSED " . count($resultSet) . " RECORDS";
}
$ kMAX_RECORDS = 40000现在,所以我希望看到输出如下:
已处理40000记录已处理40000记录已处理 20000记录
完成的收集结果
然而,我一直在看:
已处理39999记录
处理40000记录
完成的收集结果
如果我在$ ctr ++之后添加$ ctr的输出,我会得到完整的100K记录,所以在我看来是某种时序问题或从后端使用MYSQL_FETCH_ASSOC获取数据的问题。 / p>
在相关的说明中,while循环中的代码是存在的,因为在分解$ results数组之前,while循环只会落在大约45000条记录(每次都是相同的位置)。这是因为某个地方我错过了吗?
感谢您的任何意见......只需要一些关于在哪里寻找答案的想法。
干杯!
答案 0 :(得分:1)
您正在构建一系列结果,并计算新数组的成员。所以是的,预期的行为是,在获取第一行之后,您将得到“1结果”,然后是“2结果”等等......
如果您想获得预期的总行数,则需要使用mysql_num_rows()
答案 1 :(得分:0)
当你开始浏览你的结果时$ctr
没有任何价值,并且第一次递增会将其评估为0.但是当达到$kMAX_RECORDS
时,你将它重置为1而不是0.我不知道但是为什么你在第一次调用processResults()
时看到少了一行。我认为它应该是一个。
至于缺少最后20000行,请注意,只有在processResults()
超过$ctr
$kMAX_RECORDS