如何根据博客文章中的评论对回复进行排序

时间:2019-02-09 00:30:01

标签: php mysqli comments blogs

我的问题是关于如何根据每个帖子中的评论将回复分组。我是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;

插入commentsiddatenameusernamepost_idemail,{{1 }},websiteimagecommentstatus)值 (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添加密钥idcomments 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_idposts); 提交;

使用示例数据回复表结构

创建表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的数据 插入repliesrepliesiddatenameusernameemailimagecommentstatus)个值 (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),   添加密钥idComment 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_idcomments); 提交;

帖子表的结构和示例数据

创建表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的数据 插入postspostsidpostDatetitleauthorauthor_imageimagecategoriestagspost_dataviews)值 (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; 提交;

在任何帖子中,我都需要根据他们各自的评论将回复分组,包括评论和回复。即评论下方的回复。

1 个答案:

答案 0 :(得分:0)

尽管使用您的想法可能会导致成本高昂,但这是您在选择每个评论并圈选它们以进行打印之后应该采取的步骤

  1. 在每个循环期间,获取评论ID并查询答复表以查找与该ID匹配的答复
  2. 获得答复后,创建一个内部循环并输出结果

    $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']; } }