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