最近在学习数据库,然后模仿做了写了两张表,一章主题表 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 的管理员确实挺多的呢。 |