Re: Query refuses to recurse all rows
| From: | Jim Lucas | Date: | Thu, 29 May 2008 03:11:43 +0000 |
| Subject: | Re: Query refuses to recurse all rows | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-274796@lists.php.net to get a copy of this message | ||
celtic@aolohr.com wrote:
Hi, In the following code, only the first row from query1 displays along with the display stuff from query3. The problem: query1 refuses to recurse to the next and following rows. It appears that the sub-queries in the main query cause the $row++; not to work. Is there some conditional that might it prompt it to do so? I'm stumped - worked at variations for a few days. Any help, pointers, suggestions most gratefully welcome! <?php include("dbc.php"); if (!$db){ $_SESSION['db'] = "select-thread"; session_write_close(); header("location: db.php");} $query1 = "SELECT * FROM replies WHERE mid = '{$_SESSION['mid']}'"; $result1 = pg_exec($db, $query1); if (!$result1) { exit;} $numrows1 = pg_numrows($result1); $row = 0; do { $myrow = pg_fetch_array($result1, $row); /* display stuff */ $query2 = "SELECT * FROM subs WHERE mid = '{$_SESSION['mid']}' AND rid = '{$myrow['rid']}'"; $result2 = pg_exec($db, $query2); if (!$result2) { exit;} $numrows2 = pg_numrows($result2); $row = 0; do { $myrow = pg_fetch_array($result2, $row); /* display stuff */ $row++; } while ($row < $numrows2); $query3 = "SELECT * FROM subs where subsid = '{$_SESSION['subsid']}' AND rid = '{$myrow['rid']}' AND responded = '1'"; $result3 = pg_exec($db, $query3); if (!$result3) { exit;} $numrows3 = pg_numrows($result3); $row = 0; do { $myrow = pg_fetch_array($result3, $row); /* display stuff */ $row++; } while ($row < $numrows3);.... $row++; } while ($row < $numrows1); ?>If I may, I would like to suggest a few other changes that you might like. first off, don't use counters, they waist cpu cycles. Try this code out. <?php include("dbc.php"); if (!$db){ $_SESSION['db'] = "select-thread"; session_write_close(); // Whhhhaaaattttt........??? what is this for? header("location: db.php");} # # # # why are you displaying anything after a header('Location ....') call? // Build first query $query1 = "SELECT *
FROM replies
WHERE mid = '{$_SESSION['mid']}'";
// Execute query. if it fails, skip this block
if ( ($result1 = pg_exec($db, $query1)) !== false ) {
// if we are here, the query worked. Loop through results
while ( $row1 = pg_fetch_assoc($result1) ) {
/* display stuff */
// Build second query
$query2 = "SELECT *
FROM subs
WHERE mid = '{$_SESSION['mid']}'
AND rid = '{$row1['rid']}'";
// Execute second query, if it fails, skip this block
if ( ($result2 = pg_exec($db, $query2)) !== false ) {
// If we are here, the query worked. Loop through results
while ( $row2 = pg_fetch_assoc($result2) ) {
/* display stuff */
}
}
// Build third query
$query3 = "SELECT *
FROM subs
WHERE subsid = '{$_SESSION['subsid']}'
AND rid = '{$row1['rid']}'
AND responded = '1'";
// Execute third query, if it fails, skip this block
if ( ($result3 = pg_exec($db, $query3)) !== false ) {
// If we are here, the query worked. Loop through results
while ( $row3 = pg_fetch_assoc($result3) ) {
/* display stuff */
}
}
}
}
?>
My guess is is that you don't want to actually 'exit;' the script if a query fails, you just wanted to skip displaying any data for it. I might be wrong, but I adjusted my example to factor this in.
Inquiring minds want to know. Why is it that you have a header() call with a location header that tells this script to go somewhere else, but then you display a bunch of data after the header call is sent to the client?