如何去通过mysql结果两次?

无论出于什么原因,我需要通过一个MySQL结果集两次。 有没有办法做到这一点? 我不想运行查询两次,我不想重写脚本,以便将行存储在某处,然后重新使用它们。

6 Solutions collect form web for “如何去通过mysql结果两次?”

这是你如何做到的:

$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... } 

但是,我不得不说,这似乎不是正确的方式来处理这个问题。 为什么不在第一个循环内进行处理?

试试看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

您可以使用mysql_data_seek将内部指针移动到数据集的开头。 然后,你可以再次迭代它。

我承认我没有尝试过这个,但是你在第一次迭代之后试过了

 mysql_data_seek($queryresult,0); 

去第一个logging?

数据查找的替代方法是将值存储到数组中:

 $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 } 

那么,你总是可以计算你阅读的行数,然后做这样的事情:

 if (rownumber == mysql_num_rows($result)) { mysql_data_seek($result, 0); } 

不知道为什么你需要,但它是。

  • 如何在PHP中的回声内添加换行符?
  • fastcgi和fpm有什么区别?
  • in_array多个值
  • 设置PHPMyAdmin语言
  • set_time_limit()和ini_set('max_execution_time',...)之间的区别
  • CodeIgniter中的pconnect选项的优点/缺点
  • 从PHP脚本执行一个Bash脚本
  • 正确的方法来在PHP正则expression式中转义反斜杠?
  • 由于谷歌的图片代理,Gmail中的图片链接被中断
  • 用户login时需要在php会话中存储什么内容?
  • 序列化或JSON在PHP?