如何通过两次mysql结果?

时间:2011-06-22 11:42:43

标签: php mysql

无论出于何种原因,我需要两次通过mysql结果集。有办法吗? 我不想两次运行查询,我不想重写脚本,以便将行存储在某处,然后再重新使用它们。

7 个答案:

答案 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); }

不知道你为什么需要,但确实如此。