嵌套mysql_query() - 重置第一个结果的指针?

时间:2010-08-09 23:15:26

标签: php mysql

我有一位使用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查询影响是否正确?

1 个答案:

答案 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是否在循环中发生了变化。