无论出于何种原因,我需要两次通过mysql结果集。有办法吗? 我不想两次运行查询,我不想重写脚本,以便将行存储在某处,然后再重新使用它们。
答案 0 :(得分:95)
这是你可以做到的:
$result = mysql_query(/* Your query */);
while($row = mysql_fetch_assoc($result)){
// do whatever here...
}
// set the pointer back to the beginning
mysql_data_seek($result, 0);
while($row = mysql_fetch_assoc($result)){
// do whatever here...
}
但是,我不得不说,这似乎不是解决这个问题的正确方法。为什么不在第一个循环中进行处理?
答案 1 :(得分:10)
尝试mysql_data_seek()是否符合您的要求。
mysql_data_seek()移动内部 MySQL结果的行指针 与指定的结果相关联 标识符指向指定的 行号。下一次调用MySQL 获取功能,如 mysql_fetch_assoc()会返回 行。
row_number从0开始.row_number 应该是0范围内的值 到mysql_num_rows() - 1.但是如果 结果集为空 (mysql_num_rows()== 0),寻求0 将失败的E_WARNING和 mysql_data_seek()将返回FALSE
答案 2 :(得分:5)
对于mysqli,您应该执行以下操作;
$result= $con->query($sql); // $con is the connection object
$result->data_seek(0);
答案 3 :(得分:4)
我承认我没有尝试过这个,但是你在第一次迭代后试过了吗
mysql_data_seek($queryresult,0);
去第一张唱片?
答案 4 :(得分:4)
数据搜索的替代方法是将值存储到数组中:
$arrayVals = array();
$result = mysql_query(/* Your query */);
while($row = mysql_fetch_assoc($result)){
$arrayVals[] = $row;
}
// Now loop over the array twice instead
$len = count($arrayVals);
for($x = 0; $x < $len; $x++) {
$row = $arrayVals[$x];
// Do something here
}
$len = count($arrayVals);
for($x = 0; $x < $len; $x++) {
$row = $arrayVals[$x];
// Do something else here
}
答案 5 :(得分:3)
您可以使用mysql_data_seek将内部指针移动到数据集的开头。然后,你可以再次遍历它。
答案 6 :(得分:0)
好吧,你总是可以计算你读的行数,然后做这样的事情:
if (rownumber == mysql_num_rows($result)) { mysql_data_seek($result, 0); }
不知道你为什么需要,但确实如此。