论坛沉帖功能实现

2020-06-26 10:33:46 +08:00
 madpecker009

最近在开发一个论坛,有一个下沉帖子的功能,就类似于 v 站的下沉功能。想问一下这个功能是怎么实现的?给点思路吧。

3799 次点击
所在节点    PHP
12 条回复
delectate
2020-06-26 10:50:09 +08:00
要看帖子的排序依据。
前提是,不论怎样,都要加两个字段,下沉的记录时间和作用期限。

比如按照发帖时间,回复热度等,都先过滤掉有下沉记录且在作用期限的,就可以了。
GPLer
2020-06-26 10:52:27 +08:00
计算出来的帖子排名增加大小,比如+50
zsdroid
2020-06-26 11:01:42 +08:00
下沉 1 天`update table set sort_time = sort_time - 86400 where id = xxx;`
imdong
2020-06-26 11:06:32 +08:00
这样实现可还行?
论坛是按照最后回复时间排序的。
主题加两个字段,一个最后回复时间,一个是否沉贴过沉贴结束时间。

回复时更新回复时间字段,如果沉贴中,就不更新。

这样排序就会在原来的位置慢慢下沉。

婚姻就如楼上所说,直接从首页消失。
EminemW
2020-06-26 12:57:28 +08:00
应该有个字段用来排序的吧。
不是单纯的用时间排序,根据帖子的内容和评论进行打分,然后把分数作为排序依据
Jooooooooo
2020-06-26 14:08:33 +08:00
合理的做法是用权重, 而不是像楼上说的用修改时间的方法间接达到效果

一个帖子的排序规则完全由权重决定, 时间只是决定权重的因素之一

(修改时间的做法很显然的毛病是以后一旦权重和时间失去关联之后, 还要再修改这个沉帖功能
kukumao
2020-06-26 14:09:41 +08:00
按最后回复时间排序。 把最后回复时间 - 10000
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)
RickyC
2020-06-26 17:43:27 +08:00
@delectate 沉贴会不会是永久作用? 点 1 次"沉贴 1 天"就多下沉 1 天?
nightwitch
2020-06-26 17:45:47 +08:00
简单的实现:
每个帖子用一个数字来代表排序,每个帖子初始的权重为 1,每个帖子的初始分数为发帖的 unix 时间戳(一串数字),最后的排序结果是权重 * 分数。
下沉直接把权重降下去就可以了
mostkia
2020-06-26 18:16:09 +08:00
看你论坛帖子的数据库依什么算法来排序喽,按时间的话,改时间,按热度的话,降热度,按综合的话,降整个帖子的权重
seliote
2020-06-27 11:10:12 +08:00
可以看看 Redis 实战,第一章就有一个还不错的例子。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/684815

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX