开发者

Query goes in endless loop

The following goes into an endless loop, meani开发者_JAVA百科ng it just constantly shows the same record over and over and over again.

<?php
while ($rowr = mysql_fetch_assoc(mysql_query("SELECT * FROM table1")) {
    while($rowu = mysql_fetch_assoc(mysql_query("SELECT * FROM table2 WHERE id = '".$rowr['uid']."'"))){
        while($rowc = mysql_fetch_assoc(mysql_query("SELECT * FROM table3 WHERE id = '".$rowr['cid']."'"))){
    ?>
    <tr><td><?php echo $rowc['post']; ?></td><td><a href="other.php?id=<?php echo $rowu['id']; ?>"><?php echo $rowu['username']; ?></a></td><td><a href="this.php?p=d&i=<?php echo $rowr['id']; ?>"><font color="#FF0000">X</font></a></td></tr>
    <?php
        };
    };
};
?>

Why does that happen and how can I fix it?


You are putting the mysql query in the while statement so every time it gets there it does the same query and shows the same first record, you are never advancing to the next record in the result set.

Personally I would combine all queries into one, but to show how you can solve your problem (the same applies to all loops):

$results = mysql_query("SELECT * FROM table3 WHERE id = '".$rowr['cid']."'");
while ($rowc = mysql_fetch_assoc($results))
{
  // do stuff
}


Simply because the query gets executed again every time the loop condition is checked. That means you'll always get the same result unless something changes in the database in the meantime.

You need something like this:

<?php
$res1 = mysql_query("SELECT * FROM table1");
while ($rowr = mysql_fetch_assoc($res1)) {

    $res2 = mysql_query("SELECT * FROM table2 WHERE id = '".$rowr['uid']."'");
    while($rowu = mysql_fetch_assoc($res2)){

        $res3 = mysql_query("SELECT * FROM table3 WHERE id = '".$rowr['cid']."'");
        while($rowc = mysql_fetch_assoc($res3)){
?>
    <tr><td><?php echo $rowc['post']; ?></td><td><a href="other.php?id=<?php echo $rowu['id']; ?>"><?php echo $rowu['username']; ?></a></td><td><a href="this.php?p=d&i=<?php echo $rowr['id']; ?>"><font color="#FF0000">X</font></a></td></tr>
<?php
        }
    }
}
?>

That's just to illustrate why it doesn't work. As others already noted, combining your queries into one using JOIN would be advisable.

Btw, you don't need a ; after a {} block.


Use joins and you can do it in one query.

Mysql Join

Join Tutorial


You're re-executing the queries on each loop iteration, restarting the results from scratch.

You want something like this instead:

$resultR = mysql_query("... table1");
while($rowR = mysql_fetch_assoc($resultR)) {
    $resultU = mysql_query("... table2");
    while($rowU = mysql_fetch_assoc($resultU)) {
        etc...
    }
}

Of course, this is a highly inefficient construct. You end up running count($rowR) * count($rowU) * count($rowC) queries. Why not reformulate it as a join?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜