为什么没有第二mysqli_fetch_assoc执行?(Why isn't the sec

2019-10-29 19:45发布

我有2表,评论和八卦。
流言有3列:ID,用户ID,八卦。
评论有4列:ID,用户ID,gossipid,评论。
我写了这个代码,使程序回声所有具体到每一个八卦婆娘和意见。

   $query = 'SELECT * FROM gossips ORDER BY id DESC LIMIT 0,10';
                            $result = mysqli_query($cxn, $query)
                                or die("Couldn't execute query");
                            while($row = mysqli_fetch_assoc($result))
                            {
                                    echo '<div class="gossip">'.$row['gossip'].'</div><form action="comment.php" method="post"><input type="hidden" name="gossipid" value="'.$row['id'].'" />';
                                    echo '<input type="text" name="comment" placeholder="Write your comment here"/><br /><input type="submit" value="Comment" /></form><br />';
                                        $querycomment = "SELECT * FROM comment WHERE gossipid ='{$row['id']}' ORDER BY id DESC";
                                        $resultcomment = mysqli_query($cxn, $query)
                                            or die("Couldn't fetch comments.");
                                        while($comments = mysqli_fetch_assoc($resultcomment))
                                        {
                                            echo $comments['comment'];
                                        }
                            }


此代码的输出仅呼应八卦,并且不执行所述第二while循环。 可能是什么问题呢 ?

Answer 1:

你经历了整个$resultcomment首次设置你周围的环去的结果。 当外的第二次迭代$result循环启动时,没有必须从第二查询获取更多的数据,因此,实际上内循环永远只能从该第一个记录运行$result集。

既然你似乎使用外循环的数据过滤了内部循环的结果,为什么不立足于同一个数据内查询,这样你就不会在您的整个吸comment表,扔掉一切,除了匹配的记录? 这是一个可怕的浪费。

更多的东西一样

SELECT * FROM gossips
while(fetch gossip) {
     SELECT * FROM comment WHERE id = gossip.id
}

这是较为有效的,因为你只获取你真正想要显示的注释。 进一步优化将两种查询改写为单一JOIN查询,具有一定的循环逻辑,当你婆娘之间变化来检测。



文章来源: Why isn't the second mysqli_fetch_assoc executing?
标签: php mysqli