我的问题是关于如何根据每个帖子中的评论将回复分组。我是PHP的初学者,我通过练习和给自己做任务来学习。我正在一个博客中使用评论系统作为其功能的一部分。我发现很难根据评论对回复进行分组。
通过创建帖子ID的外键,我已经能够根据帖子寻求评论。我尝试使用相同的方法根据评论寻求回复。也就是说,我希望每个回复都位于相应的注释下。我在回复表中创建了(comments_id)的外键,并将其链接到评论表的ID。 因此,我使用下面的查询根据评论来寻找答复,其中显示了全部答复。每个帖子在最后一条评论后显示的回复数相同,即使它们的回复数不超过该数量。我有5条回复,其中1条评论3条,其他2条评论各1条。但是,在每个帖子的最后评论的末尾,将显示5条回复。 但是,当我将查询的第一行更改为:$ r_query = $ get_replies =“ SELECT * FROM从答复中,comments_id = $ id”;什么都不会流离失所。 下面介绍comments.php和post.php。我决定不删除代码的任何部分,因为每个部分可能都是必需的。
$r_query = $get_replies = "SELECT * FROM replies ";
<?php
$r_query = $get_replies = "SELECT * FROM replies";
$r_run = mysqli_query($con,$r_query);
if(mysqli_num_rows($r_run) <= 1){
?>
<div class="comment">
<?php
while($r_row = mysqli_fetch_array($r_run)){
$r_id = $r_row['id'];
$r_name = $r_row['name'];
$r_username = $r_row['username'];
$r_image = $r_row['image'];
$r_reply = $r_row['reply'];
?>
<div class="row single-comment user-comment">
<div class="col-sm-2">
<img src="img/<?php echo $r_image; ?>" alt="Profile Picture" class="rounded-circle">
</div>
<div class="col-sm-10">
<h4><?php echo ucfirst($r_name); ?></h4>
<span class="time"><?php echo date('M j, Y', strtotime($r_row['date'])); ?></span>
<span class="time"><?php echo 'at '.date('h:i a', strtotime($r_row['date'])); ?></span>
<p><?php echo $r_reply; ?></p>
</div>
</div>
<?php }?>
</div>
<?php }?>
使用示例数据注释表结构
创建表comments
(
id
int(11)NOT NULL,
date
日期时间默认为空,
name
varchar(255)NOT NULL,
username
varchar(255)NOT NULL,
post_id
int(11)NOT NULL,
email
varchar(255)NOT NULL,
website
varchar(255)NOT NULL,
image
varchar(255)NOT NULL,
comment
文字NOT NULL,
status
varchar(255)NOT NULL,
posts_id
int(11)非空
)ENGINE = InnoDB DEFAULT CHARSET = latin1;
插入comments
(id
,date
,name
,username
,post_id
,email
,{{1 }},website
,image
,comment
,status
)值
(136,'2019-02-08 01:16:17','Val Amasiatu','compus',91,'valamasiatu@gmail.com','avidscholars.com.ng','Unknown_Member.jpg','继续努力”,“批准”,91)
posts_id
的索引 ALTER TABLE comments
添加主键(comments
),
使用BTREE添加密钥id
(comments and posts link
);
-AUTO_INCREMENT用于转储表
posts_id
的AUTO_INCREMENT ALTER TABLE comments
修改comments
int(11)非空AUTO_INCREMENT,AUTO_INCREMENT = 155;
-转储表的约束
id
的约束 ALTER TABLE comments
在更新级联上删除约束时添加约束comments
外键(Foreign key to posts table
)参考posts_id
(posts
);
提交;
使用示例数据回复表结构
创建表id
(
replies
int(11)NOT NULL,
id
日期时间NOT NULL,
date
varchar(255)NOT NULL,
name
varchar(255)NOT NULL,
username
varchar(255)NOT NULL,
email
varchar(255)NOT NULL,
image
文字NOT NULL,
comment
varchar(255)NOT NULL,
status
int(11)非空
)ENGINE = InnoDB DEFAULT CHARSET = latin1;
-转储表comments_id
的数据
插入replies
(replies
,id
,date
,name
,username
,email
,image
, comment
,status
)个值
(163,'2019-02-08 23:02:23','Vall Amasia','val','cgeneral@gmail.com','adult-beard-blur-927022.jpg','第一回复', 'approve',151),
comments_id
的索引 ALTER TABLE replies
添加主键(replies
),
添加密钥id
(Comment and replies relationship
);
-AUTO_INCREMENT用于转储表
comments_id
的AUTO_INCREMENT ALTER TABLE replies
修改replies
int(11)非空AUTO_INCREMENT,AUTO_INCREMENT = 168;
-转储表的约束
-表id
的约束
更改表replies
在更新级联上删除约束时添加约束replies
外键(Foreign key to replies table
)参考comments_id
(comments
);
提交;
帖子表的结构和示例数据
创建表id
(
posts
int(11)NOT NULL,
id
日期时间NOT NULL,
postDate
varchar(255)NOT NULL,
title
varchar(255)NOT NULL,
author
varchar(255)NOT NULL,
author_image
varchar(255)NOT NULL,
image
varchar(255)NOT NULL,
categories
varchar(255)NOT NULL,
tags
文字NOT NULL,
post_data
int(11)NOT NULL,
views
varchar(255)非空
)ENGINE = InnoDB DEFAULT CHARSET = latin1;
-转储表status
的数据
插入posts
(posts
,id
,postDate
,title
,author
,author_image
,image
, categories
,tags
,post_data
,views
)值
(42,'2019-02-03 11:21:22','什么是Lorem Ipsum?','1234','AvePoint.jpg','administration-balance-blur-272978.jpg','教程', 'my,my,my','
但是我无法做的是找到这个缺失的结束标记div并将其放置在应该放置的位置。
',8, '发布'),
status
的索引 ALTER TABLE posts
添加主键(posts
);
-AUTO_INCREMENT用于转储表
-表id
的AUTO_INCREMENT
更改表posts
修改posts
int(11)非空AUTO_INCREMENT,AUTO_INCREMENT = 92;
提交;
在任何帖子中,我都需要根据他们各自的评论将回复分组,包括评论和回复。即评论下方的回复。
答案 0 :(得分:0)
尽管使用您的想法可能会导致成本高昂,但这是您在选择每个评论并圈选它们以进行打印之后应该采取的步骤
获得答复后,创建一个内部循环并输出结果
$comments = mysqli_query($conn, "SELECT * FROM comments WHERE post_id = $postId)";
while($comment = mysqli_fetch_assoc($comments)){
echo $comment['message'];
$replies = mysqli_query($conn, "SELECT * FROM replies WHERE commentId = $comment['comments_id']);
while($reply = mysqli_fetch_assoc($replies)){
echo $reply['message'];
}
}