php – 如何使用2个SQL查询检索包含所有注释的所有帖子
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 如何使用2个SQL查询检索包含所有注释的所有帖子,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2126字,纯文字阅读大概需要4分钟。
内容图文
我正在尝试创建一个包含帖子列表的页面,并在每个帖子下面发布属于该帖子的所有评论.最初我想使用一个查询来使用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, username, 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查询检索包含所有注释的所有帖子所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。