网易评论盖楼的数据结构

最近在写一个给app添加评论的功能,发现不太好写,有种解决方案是采用第三方的评论插件,我感觉比较low,没有采纳。于是参考其他网站的评论功能。


网易的评论的盖楼相当酷炫,网上也有很多实现其的盖楼功能的方法,我认为不太正确,于是写了这篇文章。

我监听了网易的页面跟 服务器通信的json文件。

1.新闻的地址:http://news.163.com/17/0627/09/CNU65GI80001875N.html

2.评论的地址http://comment.news.163.com/news_guonei8_bbs/CNU65GI80001875N.html

3.评论的json路径

http://comment.news.163.com/api/v1/products/a2869674571f77b5a0867c3d71db5856/threads/CNU65GI80001875N/comments/newList?offset=0&limit=30&showLevelThreshold=72&headLimit=1&tailLimit=2&callback=getData&ibc=newspc&_=1498551699911

提取后的json包含两个字段:commentids和comments

commentids用来存放每楼的评论的所有的id,如下图所示。


comments是一个map,key是评论的id。value是对应的评论的数据,里面包含用户的信息,ip,用户id等等信息,不再具体分析 。如下图所示。


那么根据这些信息。如何做到楼中楼呢?详见下图


由此猜想数据库中应该是评论的内容和楼层是分开存放的

comment是一个表,用来存放具体的评论。

floor是一个表用来存放楼层,每个楼层中包含所有按顺序排列的评论的id





  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
本书讨论数据结构和算法分析。数据结构主要研究组织大量数据的方法,而算法分析则是对算法运行时间的评估。随着计算机的速度越来越快,对于能够处理大量输入数据的程序的需求变得日益急切。可是,由于在输入量很大的时候,程序的低效率现象变得非常明显,因此这又要求对效率问题给予更仔细的关注。通过在实际编程之前对算法的分析,学生可以决定一个特定的解法是否可行。例如,读者在本书中将读到一些特定的问题并看到精心的实现方法是如何把对大量数据的时间限制从16年减至不到1秒的。因此,若无运行时间的阐释,就不会有算法和数据结构的提出。   本书是国外数据结构与算法分析方在的标准教材,介绍了数据结构(大量数据的组织方法)以及算法分析(算法运行时间的估算)。本书的编写目标是同时廛授好的程序设计和算法分析技巧,使读者可以开发出具有**效率的程序。 本书可作为高级数据结构课程或研究生一年级算法分析课程的教材,使用本书需具有一些中级程序设计知识,还需要离散数学的一些背景知识。   随着速度的不断提高和存储容量的持续增长,计算机的功能日益强大,从而处理数据和解决问题的规模和复杂程度与日俱增。这不仅带来了需要认真研究的新课题,而且突出了原有数据结构和算法效率低下的缺点。程序的效率问题不是由于计算机功能的强大而受到冷落,相反地,倒是被人们提到前所未有的重视程度,因为大型问题的解决所涉及到的大容量存储和高速度运算容不得我们对效率有丝毫的忽视。
实现评论盖楼系统一般需要以下步骤: 1. 创建评论表:在MySQL中创建一个表来存储评论数据,包括评论内容、时间戳、用户ID、回复的评论ID等字段。例如: ``` CREATE TABLE comments ( id INT(11) NOT NULL AUTO_INCREMENT, user_id INT(11) NOT NULL, content TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, parent_id INT(11), PRIMARY KEY (id) ); ``` 2. 编写PHP脚本:编写PHP脚本来处理用户提交的评论,并将其保存到数据库表中。需要注意的是,当用户回复某条评论时,需要保存该评论的ID作为回复的评论ID。 ``` // 连接数据库 $conn = mysqli_connect($host, $username, $password, $dbname); // 处理用户提交的评论 if ($_SERVER['REQUEST_METHOD'] == 'POST') { $user_id = $_POST['user_id']; $content = $_POST['content']; $parent_id = $_POST['parent_id']; $sql = "INSERT INTO comments (user_id, content, parent_id) VALUES ('$user_id', '$content', '$parent_id')"; mysqli_query($conn, $sql); } ``` 3. 显示评论列表:编写PHP脚本来查询数据库中的评论数据,并将其显示在页面上。需要使用递归算法来处理评论的嵌套结构,并使用CSS和JavaScript来实现评论盖楼的效果。 ``` // 获取根评论列表 $sql = "SELECT * FROM comments WHERE parent_id IS NULL"; $result = mysqli_query($conn, $sql); // 递归处理子评论列表 function showComments($parent_id, $level) { global $conn; $sql = "SELECT * FROM comments WHERE parent_id=$parent_id"; $result = mysqli_query($conn, $sql); while ($row = mysqli_fetch_assoc($result)) { echo '<div style="margin-left: ' . ($level * 20) . 'px;">'; echo '<p>' . $row['content'] . '</p>'; echo '<small>' . $row['created_at'] . '</small>'; echo '<a href="#" onclick="showReplyForm(' . $row['id'] . ')">回复</a>'; echo '<div id="reply-form-' . $row['id'] . '" style="display: none;">'; echo '<form method="post" action="#">'; echo '<input type="hidden" name="parent_id" value="' . $row['id'] . '">'; echo '<input type="text" name="content">'; echo '<input type="submit" value="提交">'; echo '</form>'; echo '</div>'; showComments($row['id'], $level + 1); echo '</div>'; } } // 显示评论列表 while ($row = mysqli_fetch_assoc($result)) { echo '<div>'; echo '<p>' . $row['content'] . '</p>'; echo '<small>' . $row['created_at'] . '</small>'; echo '<a href="#" onclick="showReplyForm(' . $row['id'] . ')">回复</a>'; echo '<div id="reply-form-' . $row['id'] . '" style="display: none;">'; echo '<form method="post" action="#">'; echo '<input type="hidden" name="parent_id" value="' . $row['id'] . '">'; echo '<input type="text" name="content">'; echo '<input type="submit" value="提交">'; echo '</form>'; echo '</div>'; showComments($row['id'], 1); echo '</div>'; } ``` 需要注意的是,为了避免SQL注入攻击,需要使用参数化查询或预处理语句来处理用户提交的数据。另外,为了安全起见,还需要进行用户身份验证和数据过滤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值