Как пройти результат mysql дважды? - программирование
Подтвердить что ты не робот

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

По какой-то причине мне нужно дважды выполнить набор результатов mysql. Есть ли способ сделать это? Я не хочу дважды запускать запрос, и я не хочу переписывать script, чтобы он где-то хранил строки, а затем повторно использовал их позже.

4b9b3361

Ответ 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);