Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Second while loop not running. Why?

I have two while loops running one after the other (not inside of each other) - I've simplified the code a bit so that only the important parts of it are listed below. The problem arises when I compare the two echoed queries because the 2nd while loop apparently isn't running at all.

I read somewhere that someone got around the problem by using a for loop for the second one but I want to get down to why exactly the second while loop is not running in my code.

$query_work_title = "SELECT title FROM works WHERE ";
while ($row = mysql_fetch_assoc($result_work_id)) {
    $query_work_title .= "OR '$work_id' ";
}
echo $query_work_title;
echo '<br />';
$result_work_title = mysql_query($query_work_title) or
    die(mysql_error($cn));

// retrieve the authors for each work in the following query
$query_author_id = "SELECT author_id FROM works_and_authors WHERE ";
while ($row = mysql_fetch_assoc($result_work_id)) {
    $query_author_id .= "work_id = 'hello' ";
}
echo $query_author_id;
like image 711
Simon Suh Avatar asked Sep 22 '26 04:09

Simon Suh


2 Answers

The MySQL extension keeps track of an internal row pointer for each result. It increments this pointer after each call to mysql_fetch_assoc(), and is what allows you to use a while loop without specifying when to stop. If you intend on looping through a result set more than once, you need to reset this internal row pointer back to 0.

To do this, you would mysql_data_seek() after the first loop:

while ($row = mysql_fetch_assoc($result_work_id)) {
    $query_work_title .= "OR '$work_id' ";
}
mysql_data_seek($result_work_id, 0);
like image 91
simshaun Avatar answered Sep 24 '26 18:09

simshaun


You've already looped through the result rows, so it's at the end and returns FALSE. (That's why it exited the loop the first time.)

To reset the internal pointer to the beginning of the result set, use mysql_data_seek().

mysql_data_seek($result_work_id, 0);
like image 38
Wiseguy Avatar answered Sep 24 '26 18:09

Wiseguy



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!