一个帖子由多个属性, 如浏览数, 回复数, 发布时间,
当需要综合以上因素来实现列表页排序的时候, mysql 查询语句可能就会 order by 多个字段,
我想以一个权重值字段来实现综合排序, 其优先级分别是 浏览数 > 回复数 > 发布时间, 并且所有所有三天之前发布的帖子都要排在新发布的帖子之后,
请问这样的权重值计算公式大概是怎样的呢?
1
wenzhoou 2018-06-28 18:49:03 +08:00 via Android
听你这样子像是 a x^3 + b x^2+ cx
|
2
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 |
3
GGGG430 OP |
4
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 没有上界,那么应该是没有单独一个权重字段满足你的要求。 |
5
wenzhoou 2018-06-28 23:18:01 +08:00 via Android
@GGGG430 恩。说的不对。应该是和二楼类似的想法。a x^3 + b y^2+ cz。x 和 y 和 z 分别代表 浏览数 ,回复数 , 发布时间。然后你根据需要调整 a 和 b 和 c 的值。就能得到一个权重。
|
6
rogwan 2018-06-28 23:24:06 +08:00 via iPhone
这种计算不应该实时处理
|
7
tomoya92 2018-06-29 07:56:27 +08:00 via iPhone
|