我有一位使用FluxBB的朋友,他刚刚为这个论坛软件安装了一个修改版。 viewtopic.php文件有一个while循环,它在结果对象上执行mysql_fetch_assoc()。在这个循环内部,第二个结果对象上有第二个mysql_fetch_assoc()。
嵌套while循环的原因是有很多帖子,每个帖子都是HasMany谢谢你。
这里有一些代码可以更好地说明我的意思:
$result = mysql_query("some-query");
while($cur_post = mysql_fetch_assoc($result)) {
// For every post, execute this second query
$secondResult = mysql_query("some-query that uses the $cur_post id");
while($thank_you = mysql_fetch_assoc($secondResult)) {
// Display the thank_you
}
}
问题是当使用第二个mysql_query时,最外面的while循环在一次迭代后停止。如果再次运行第一个查询,它确实有效,这是一个非常脏的黑客,可以使用OFFSET。
对我来说,似乎在运行第二个mysql查询时,无论$ result指向什么都是无效的。但是,我几乎不知道PHP,所以这就是我遇到这个问题的原因。
你会如何解决这个问题? $ result指针是否受第二个mysql查询影响是否正确?
答案 0 :(得分:2)
mysql_query()
发送一个唯一的查询 (不支持多个查询) 到当前活动的数据库 与之关联的服务器 指定link_identifier。
您必须获取所有帖子(或其中一批)并将所需的ID或其他任何数据存储到数组或对象中,然后迭代它以进行相应的查询并显示输出。
或者你可以使用这样的一些sql:
SELECT thank_you.* FROM thank_you, post WHERE post.id = thank_you.post_id ORDER BY thank_you.post_id;
当然,如果你失去分组,你必须添加一些额外的逻辑来构建正确的表示结构,基于post_id
是否在循环中发生了变化。