Eine SQL-Abfrage nicht mehrmals abfragen

Manchmal kommt es vor, dass man eine bestimmte SQL-Abfrage bzw. das Ergebnis dieser innerhalb eines Scripts mehrmals benötigt. Ein ResultSet kann allerdings nur einmal durchlaufen werden. Man müsste deshalb die gleiche Query weiter unten im Script noch einmal abfragen. Aber da diese Daten ja bereits geholt worden, ist eine solche Abfrage eigentlich eine Verschwendung von Performance. WIe gehts aber besser?

Hier ncohmal der Code, der ersten Abfrage:

$einlesen = mysql_query("SELECT spalte1,spalte2 FROM table WHERE spalte3='wert'"); 
while($einzeln = mysql_fetch_assoc($einlesen)) {  
echo $einzeln['spalte1']." ".$einzeln['spalte2']; 
}

Diese Daten benötigen wir allerdings weiter unten noch einmal. Nun könnte man sich die Daten in dieser Schleife bereits in Arrays schreiben, allerdings gibt es einen eleganteren Weg: mysql_data_seek().

Mit der Funktion mysql_data_seek() kann man den Zeiger eines Resultsets an eine gewünschte Position zurückschieben. Weil wir alle Daten noch einmal benötigen (ab Zeiger auf Ergebnisdatensatz 0), verwenden wir

mysql_data_seek($einlesen,0);

Somit kann weiter unten im gleichen Script wieder mit der Schleife wie oben die Ergebnisliste durchlaufen werden. Man sollte dann natürlich zwischendurch die Variable $einlesen nicht mit irgendetwas anderem belegen.