首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据博客文章中的评论对回复进行排序

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

Stack Overflow用户
提问于 2019-02-09 08:30:01
回答 1查看 81关注 0票数 0

我的问题是如何根据每个帖子中的评论对回复进行分组。我是PHP的初学者,我通过练习和给自己分配任务来学习。我在一个博客上工作,它使用评论系统作为其功能的一部分。我发现很难根据评论对回复进行分组。

我已经能够通过创建帖子id的外键来根据帖子寻求评论。我试着用同样的方法,根据评论来寻求回复。也就是说,我希望每个回复都放在相应的评论下面。我在replies表中创建了一个(comments_id)的外键,并将其链接到comments表的id。因此,我使用下面的查询根据评论来寻求回复,它显示了整个回复。每个帖子在最后一条评论后都会显示相同数量的回复,即使它们的回复数量没有达到该数量。我有5个回复,1个评论3个,其他2个评论各1个。但在每个帖子的最后一条评论的末尾,将显示5条回复。但是,当我将查询中的第一行改为:$r_query = $get_replies = "SELECT * FROM replies comments_id =$id“时,什么也不会被替换。comments.php和post.php如下所示。我决定不删除代码的任何部分,因为每个部分都可能是必要的。

代码语言:javascript
复制
$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  }?>

包含示例数据的注释表结构

CREATE TABLE comments ( id int(11) NOT NULL,date datetime DEFAULT NULL,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 text NOT NULL,D11 varchar(255) NOT NULL,posts_id int(11) NOT NULL ) ENGINE=InnoDB默认CHARSET=latin1;

插入comments (iddatenameusernamepost_idemailwebsiteimagecommentstatusposts_id)值(136,'2019-02-08 01:16:17','Val Amasiatu','compus',91,'valamasiatu@gmail.com',‘avidacads.com.ng’,'Unknown_Member.jpg',‘继续保持’,‘批准’,91),

--表comments的索引

ALTER TABLE comments ADD PRIMARY KEY (id),ADD KEY comments and posts link (posts_id)使用BTREE;--转储表的AUTO_INCREMENT

--表comments的AUTO_INCREMENT

ALTER TABLE comments MODIFY id int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=155;--转储表的约束

--表comments的约束

ALTER TABLE comments ADD CONSTRAINT Foreign key to posts table FOREIGN KEY (posts_id) REFERENCES posts (id) ON DELETE CASCADE ON UPDATE CASCADE;COMMIT;

包含示例数据的回复表结构

CREATE TABLE replies ( id int(11) NOT NULL,date datetime NOT NULL,name varchar(255) NOT NULL,username varchar(255) NOT NULL,email varchar(255) NOT NULL,image varchar(255) NOT NULL,comment text NOT NULL,status varchar(255) NOT NULL,comments_id int(11) NOT NULL ) ENGINE=InnoDB默认CHARSET=latin1;--将表replies INSERT的数据转储到replies (iddatenameusernameemailimagecommentstatuscomments_id)值(163,'2019-02-08 23:02:23','val','cgeneral@gmail.com',‘成人胡子-replies-927022.jpg’,‘第一个回复’,‘批准’,151),

--表replies的索引

ALTER TABLE replies ADD PRIMARY KEY (id),ADD KEY Comment and replies relationship (comments_id);--转储表的AUTO_INCREMENT

--表replies的AUTO_INCREMENT

ALTER TABLE replies MODIFY id int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=168;--转储的表的约束--表的约束replies ALTER table replies添加约束Foreign key to replies table外键(comments_id)引用comments (id) ON DELETE CASCADE ON UPDATE CASCADE;COMMIT;

POSTS表的结构和示例数据

CREATE TABLE posts ( id int(11) NOT NULL,postDate datetime 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 varchar(255) NOT NULL,post_data text NOT NULL,D84 int(11) NOT NULL,status varchar(255) NOT NULL ) ENGINE=InnoDB默认CHARSET=latin1;--将表格posts INSERT的数据转储到posts (idpostDatetitleauthorauthor_imageimagecategories,<代码>D95,<代码>D96,<代码>D97,<代码>D98)值(42,'2019-02-03 11:21:22',‘什么是Lorem Ipsum?','1234','AvePoint.jpg','administration-balance-blur-272978.jpg','tutorials','my,my',’

但是我一直没能找到这个缺失的结束标记div,并将它放在它应该在的位置。

',8,‘发布’),

--表posts的索引

ALTER table posts ADD PRIMARY KEY (id);-- AUTO_INCREMENT用于转储的表-- AUTO_INCREMENT for TABLE posts ALTER TABLE posts MODIFY id int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=92;COMMIT;

我需要根据他们在任何带有评论和回复的帖子中的各自评论对回复进行分组。即在评论下的回复。

EN

回答 1

Stack Overflow用户

发布于 2019-02-09 09:04:02

尽管这种方法可能很昂贵,但使用你的想法,这是你在选择每个评论并浏览它们以打印它们之后应该采取的步骤

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54602012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档