Как пройти результат mysql дважды?

По какой-то причине мне нужно дважды выполнить набор результатов 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); 

перейти к первой записи?

Альтернативой поиску данных является сохранение значений в массиве:

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

Не знаю, зачем вам это нужно, но вот оно.