По какой-то причине мне нужно дважды выполнить набор результатов mysql. Есть ли способ сделать это? Я не хочу дважды запускать запрос, и я не хочу переписывать script, чтобы он где-то хранил строки, а затем повторно использовал их позже.
Как пройти результат mysql дважды?
Ответ 1
Вот как вы можете это сделать:
$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...
}
Однако, я должен сказать, что это не кажется правильным способом справиться с этим. Почему бы не выполнить обработку в первом цикле?
Ответ 2
Попробуйте mysql_data_seek() делает то, что вам нужно.
mysql_data_seek() перемещает внутреннюю указатель строки результата MySQL связанный с указанным результатом идентификатор, указывающий на указанный номер строки. Следующий вызов MySQL fetch, например mysql_fetch_assoc(), вернет это строки.
row_number начинается с 0. Число_ row_number должно быть значение в диапазоне от 0 to mysql_num_rows() - 1. Однако если набор результатов пуст (mysql_num_rows() == 0), поиск 0 с ошибкой E_WARNING и mysql_data_seek() вернет FALSE
Ответ 3
Вы можете использовать mysql_data_seek, чтобы переместить внутренний указатель в начало набора данных. Затем вы можете просто повторить его снова.
Ответ 4
Я признаюсь, что не пробовал это, но вы пробовали после своей первой итерации
mysql_data_seek($queryresult,0);
перейти к первой записи?
Ответ 5
Альтернативой поиску данных является сохранение значений в массиве:
$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
}
Ответ 6
Ну, вы всегда можете подсчитать количество прочитанных строк и затем сделать что-то вроде этого:
if (rownumber == mysql_num_rows($result)) { mysql_data_seek($result, 0); }
Не знаю, зачем вам это нужно, но вот оно.
Ответ 7
Для mysqli вы должны сделать следующее:
$result= $con->query($sql); // $con is the connection object
$result->data_seek(0);