Thanks everyone for your input and apologies for being so slow to get back into the forum and respond.
I'm surprised there isn't some sort of obvious way of using $result without it being emptied; in some cases I'm dealing with a remote database so it's really important to reduce the number of queries sent to MySQL (I also query a separate MS SQL database, again remotely).
What I usually do is what bradgrafelman suggests; store the results in an array (using a function to run the query) and loop over it but in those cases I've usually got a complicated query with a collection of joins, and I want to manipulate the return and generate some additional results and package the whole lot up in a useful array.
In this case however, the return didn't need any changes - I simply wanted to run through the results more than once. Given the close relationship between PHP and SQL, I do think it's surprising that this isn't possible in an obvious way.
Would it be possible to write a function that takes an SQL $result and stores it in an array that can be read more than once, ideally in the same way (using mysql_fetch_array) no matter what the shape and size of the result? Can someone advise which part of the result parsing process 'deletes' the content? Is a variable pointer thing, and if so why can't we simply reset the pointer? Also - why can't we write:
$result2 = $result;
... and use $result2 the same way?
I'm still a relative beginner in PHP. I'm always amazed by the sheer flexibility of the language; there really isn't anything you can't do; this seems like such a simple thing! It looks like a really good case for a new PHP function.
Thanks again