最近在开发一个论坛,有一个下沉帖子的功能,就类似于 v 站的下沉功能。想问一下这个功能是怎么实现的?给点思路吧。
1
delectate 2020-06-26 10:50:09 +08:00
要看帖子的排序依据。
前提是,不论怎样,都要加两个字段,下沉的记录时间和作用期限。 比如按照发帖时间,回复热度等,都先过滤掉有下沉记录且在作用期限的,就可以了。 |
2
GPLer 2020-06-26 10:52:27 +08:00 via Android
计算出来的帖子排名增加大小,比如+50
|
3
zsdroid 2020-06-26 11:01:42 +08:00
下沉 1 天`update table set sort_time = sort_time - 86400 where id = xxx;`
|
4
imdong 2020-06-26 11:06:32 +08:00 via iPhone
这样实现可还行?
论坛是按照最后回复时间排序的。 主题加两个字段,一个最后回复时间,一个是否沉贴过沉贴结束时间。 回复时更新回复时间字段,如果沉贴中,就不更新。 这样排序就会在原来的位置慢慢下沉。 婚姻就如楼上所说,直接从首页消失。 |
5
EminemW 2020-06-26 12:57:28 +08:00
应该有个字段用来排序的吧。
不是单纯的用时间排序,根据帖子的内容和评论进行打分,然后把分数作为排序依据 |
6
Jooooooooo 2020-06-26 14:08:33 +08:00 2
合理的做法是用权重, 而不是像楼上说的用修改时间的方法间接达到效果
一个帖子的排序规则完全由权重决定, 时间只是决定权重的因素之一 (修改时间的做法很显然的毛病是以后一旦权重和时间失去关联之后, 还要再修改这个沉帖功能 |
7
kukumao 2020-06-26 14:09:41 +08:00
按最后回复时间排序。 把最后回复时间 - 10000
|
8
RickyC 2020-06-26 17:40:32 +08:00
V 站每点一次"下沉", 就多下沉 1 天; 顶一下的话, 帖子还往上跑
主题数据表包含: create_time(创建时间戳), last_reply_time(最后回复时间戳), sort_time(用于排序的时间戳) 3 个字段 整个论坛以 sort_time 来排序帖子 1. 刚发帖时 last_reply_time = sort_time = create_time = 此刻时间戳 2. 点下沉后, 给 sort_time 减少 86400 3. 有人回帖时, a. 计算 原 last_reply_time - 原 sort_time 的值, 记录为 x b. 更新 last_reply_time 为此刻时间戳 c. 更新 sort_time 为 (新的 last_reply_time - x) 4. 最后一条回复被删除时 a. 计算 原 last_reply_time - 原 sort_time 的值, 记录为 x b. 查找新的最后一条回复, 将主题的 last_reply_time 记录为这条回复的 create_time c. 更新主题的 sort_time 为(新的 last_reply_time - x) |
10
nightwitch 2020-06-26 17:45:47 +08:00
简单的实现:
每个帖子用一个数字来代表排序,每个帖子初始的权重为 1,每个帖子的初始分数为发帖的 unix 时间戳(一串数字),最后的排序结果是权重 * 分数。 下沉直接把权重降下去就可以了 |
11
mostkia 2020-06-26 18:16:09 +08:00
看你论坛帖子的数据库依什么算法来排序喽,按时间的话,改时间,按热度的话,降热度,按综合的话,降整个帖子的权重
|
12
seliote 2020-06-27 11:10:12 +08:00
可以看看 Redis 实战,第一章就有一个还不错的例子。
|