一个论坛帖子按权重排序的问题

2018-06-28 18:03:43 +08:00
 GGGG430

一个帖子由多个属性, 如浏览数, 回复数, 发布时间,

当需要综合以上因素来实现列表页排序的时候, mysql 查询语句可能就会 order by 多个字段,

我想以一个权重值字段来实现综合排序, 其优先级分别是 浏览数 > 回复数 > 发布时间, 并且所有所有三天之前发布的帖子都要排在新发布的帖子之后,

请问这样的权重值计算公式大概是怎样的呢?

1426 次点击
所在节点    问与答
8 条回复
wenzhoou
2018-06-28 18:49:03 +08:00
听你这样子像是 a x^3 + b x^2+ cx
ballshapesdsd
2018-06-28 19:15:42 +08:00
假设浏览数上限是 m,2200 年时间戳 n,假设浏览数大于等于回复数。
浏览数 x,回复数 y,发布时间戳 z,新变量 w ( 1 表示 3 天之内回复,0 表示 3 天以前)。
权重值:z+n*y+n*m*x+n*m*m*w。
一个可能的改善是限制时间戳的范围和把单位从 ms 改成 s。

我觉得这样计算权重值没什么用,还不如直接 orderby
GGGG430
2018-06-28 20:07:38 +08:00
@wenzhoou x 是什么意思呢
@ballshapesdsd 没看懂这个公式...
ballshapesdsd
2018-06-28 20:12:22 +08:00
@GGGG430 #3 你要有两个变量 x,y,想要把这两个变量变成一个权重 z,保证 orderby z 等价于 orderby x,y。
需要知道 y 的最大可能值,比如说是 m。
那么 z=m*x+y 可以满足你的要求。
多个变量类似。
如果 y 没有上界,那么应该是没有单独一个权重字段满足你的要求。
wenzhoou
2018-06-28 23:18:01 +08:00
@GGGG430 恩。说的不对。应该是和二楼类似的想法。a x^3 + b y^2+ cz。x 和 y 和 z 分别代表 浏览数 ,回复数 , 发布时间。然后你根据需要调整 a 和 b 和 c 的值。就能得到一个权重。
rogwan
2018-06-28 23:24:06 +08:00
这种计算不应该实时处理
tomoya92
2018-06-29 07:56:27 +08:00
GGGG430
2018-06-29 21:37:38 +08:00
@rogwan 你是怎么处理的呢?
@liygheart Good!

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

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

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

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

© 2021 V2EX