php – 如何使用2个SQL查询检索包含所有注释的所有帖子

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 如何使用2个SQL查询检索包含所有注释的所有帖子脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试创建一个包含帖子列表的页面,并在每个帖子下面发布属于该帖子的所有评论.最初我想使用一个查询来使用sql的JOIN检索所有帖子注释,但我发现无法检索具有多个注释的帖子.它仅显示每个帖子最多为1条评论的帖子,或者只是根据评论数量多次显示帖子.

在这个相关问题中,有人谈到使用2个查询
How to print posts and comments with only one sql query

但是我该怎么做?

我有帖子的查询和while循环,但我显然不想为该循环中的每个帖子运行查询.

$getPost = MysqL_query('SELECT p.post_id,p.user_id,p.username,p.content
                        From post p
                        ORDER BY p.post_id DESC');

while($row = MysqL_fetch_array($getPost)) 
{ 
... 
}

表结构(回复是用于存储注释的表):

POST (post_id (Primary key),user_id,username,content,timestamp)
REPLY (reply_id (PRimary key),post_id,reply_content,timestamp)

解决方法

您可以在单个查询中执行此操作,如果原始帖子中的数据量很小,则可以:

$getPost = MysqL_query('SELECT
  p.*,r.reply_id,r.username r_username,r.reply_content,r.timestamp r_timestamp
  From post p
    left join reply r
  ORDER BY p.post_id DESC'
);

$posts = array();
$last_id = 0;
while($row = MysqL_fetch_array($getPost)) 
{ 
  if ($last_id != $row['post_id']) {
    $posts[] = array(
      'post_id' => $row['post_id'],'user_id' => $row['user_id'],'username' => $row['username'],'content' => $row['content'],'timestamp' => $row['timestamp'],'comments' => array()
    );
  }

  $posts[sizeof($posts) - 1]['comments'][] = array(
    'reply_id' => $row['reply_id'],'username' => $row['r_username'],'reply_content' => $row['reply_content'],'timestamp' = $row['r_timestamp']
  );
}

否则,将其分成两个查询,如下所示:

$getPost = MysqL_query('SELECT
  p.*,FROM post p
  ORDER BY p.post_id DESC'
);

$rows = array();
$ids = array();
$index = array();
while($row = MysqL_fetch_assoc($getPost)) {
  $row['comments'] = array();
  $rows[] = $row;
  $ids[] = $row['post_id'];
  $index[$row['post_id']] = sizeof($rows) - 1;
}

$getComments = MysqL_query('select r.* from replies r where r.post_id in ("'
  . join('","',$ids)
  . '")');
while ($row = mysq_fetch_assoc($getComments)) {
  $rows[$index[$row['post_id']]]['comments'][] = $row;
}

… 或类似的东西.任何一个选项都允许您使用WHERE子句乱丢您的第一个查询,等等.第二种方法的优点是您不会为每条评论重新传输原始帖子数据!

脚本宝典总结

以上是脚本宝典为你收集整理的php – 如何使用2个SQL查询检索包含所有注释的所有帖子全部内容,希望文章能够帮你解决php – 如何使用2个SQL查询检索包含所有注释的所有帖子所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。