最近在学习数据库,然后模仿做了写了两张表,一章主题表 Topic , 一章主题评论表 Comment , Comment 有一个外键 topic_id
指向主题。
然后我看 V2EX 主题的排序是同时按主题和评论交替排序的,我试了很多遍都没有成功。
大家知道怎么实现吗,强迫症,做不出来揪心 TAT
1
mathgl 2016-07-23 13:38:29 +08:00
记得 livid 提过,用 redis 做的。
|
3
jason19659 2016-07-23 13:59:44 +08:00
加个字段..latestDate..
|
4
markme OP @jason19659 都有,按时间排序做不到这个效果。
|
5
mornlight 2016-07-23 14:14:01 +08:00
每个主题有一个最后更新时间,这不是最直接的思路吗
|
6
9hills 2016-07-23 14:19:10 +08:00
SQL 为啥不能实现。。。最简单方法主题加个字段 LatestUpdate ,任何对主题的修改以及新的回复都修改这个字段不就好了...
|
7
markme OP |
8
binota 2016-07-23 17:45:42 +08:00
两张表, Threads_Basic 、 Threads_Posts ,
Threads_Basic 只存主题的标题、发帖人、发帖时间 Threads_Posts 存包含主帖在内的帖子内容、发帖人、发帖时间、对应的主帖 ID 这样只要按发帖时间选择 Threads_Posts 再 Join Threads_Basic 就可以了 |
9
cloverstd 2016-07-23 19:14:55 +08:00
|
11
ilikekindle 2016-07-23 22:00:50 +08:00
v2 的主题不单是靠时间排序吧?
|
12
markme OP @ilikekindle 嗯,上面讨论的这些完全可以实现这个效果。但是要考虑性能的话,就有些吃紧了。
实际的话应该是类似 Redis 缓存加按权重排序来实现的。也可能是其他更好的方式。 |
13
julyclyde 2016-07-23 23:54:51 +08:00
实际上其实并不是按这个排的,没实时
|
15
dangyuluo 2016-07-24 00:49:22 +08:00
redis 排序
|
16
lianghudou 2016-07-24 00:58:05 +08:00
楼上一群菜鸟,把简单的功能说的神乎其神,其实就是一个 topic 表有两个最后回复时间的字段,一个是真的最后回复时间,一个是假的最后回复时间,假设这个假的最后回复时间名叫 lasttime_fake 。
其实就是在这个假的 lasttime_fake 上做文章,逼格越高的帖子,这个 lasttime_fake 越接近真实时间,逼格很低的帖子,可能发完以后 lasttime_fake 就是 1 天前。这样就导致了一个很和谐的后果:在 V2EX 上很难见到逼格低的帖子。 至于这逼格怎么判断的呢?可以 100%的肯定,这不全是靠算法,里面有人工的成分。 |
17
markme OP @lianghudou 嗯呐,谢谢,这也是一种。 V2EX 的管理员确实挺多的呢。
|