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



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

617   7  

7 ответов:

вот как вы можете это сделать:

$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. Номер строки должно быть значение в диапазоне от 0 to mysql_num_rows () - 1. Однако если результирующий набор пуст (mysql_num_rows() == 0), a стремиться к 0 потерпит неудачу с E_WARNING и mysql_data_seek () вернет FALSE

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

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

можно использовать mysql_data_seek для перемещения внутреннего указателя в начало набора данных. Затем вы можете просто повторить его снова.

признаюсь, я не пробовал этого, но вы не пробовали после первой итерации

mysql_data_seek($queryresult,0);

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

на mysqli вы должны сделать следующее:

$result= $con->query($sql); // $con is the connection object
$result->data_seek(0); 

Ну, вы всегда можете подсчитать количество строк, которые Вы читаете, а затем сделать что-то вроде этого:

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

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

Comments

    Ничего не найдено.