65 votes

Comment parcourir deux fois le résultat mysql?

Pour une raison quelconque, je dois parcourir deux fois un jeu de résultats mysql. Y a-t-il un moyen de le faire? Je ne veux pas exécuter la requête deux fois et je ne veux pas avoir à réécrire le script pour qu'il stocke les lignes quelque part, puis les réutilise plus tard.

109voto

Shef Points 21595

Voici comment vous pouvez procéder :

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

Cependant, je dois dire que cela ne semble pas la bonne façon de gérer cela. Pourquoi ne pas faire le traitement dans la première boucle ?

10voto

guitarlass Points 752

Pour mysqli, vous devez procéder comme suit :

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

4voto

BugFinder Points 7662

J'avoue que je n'ai pas essayé ça, mais avez-vous essayé après votre première itération

 mysql_data_seek($queryresult,0);

aller au premier enregistrement ?

4voto

Clintonio Points 57

L'alternative à la recherche de données consiste à stocker les valeurs dans un tableau :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X