首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
V2EX  ›  问与答

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

  •  
  •   GGGG430 · 206 天前 · 527 次点击
    这是一个创建于 206 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    8 回复  |  直到 2018-06-29 21:37:38 +08:00
        1
    wenzhoou   206 天前 via Android
    听你这样子像是 a x^3 + b x^2+ cx
        2
    ballshapesdsd   206 天前
    假设浏览数上限是 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   206 天前
    @wenzhoou x 是什么意思呢
    @ballshapesdsd 没看懂这个公式...
        4
    ballshapesdsd   206 天前
    @GGGG430 #3 你要有两个变量 x,y,想要把这两个变量变成一个权重 z,保证 orderby z 等价于 orderby x,y。
    需要知道 y 的最大可能值,比如说是 m。
    那么 z=m*x+y 可以满足你的要求。
    多个变量类似。
    如果 y 没有上界,那么应该是没有单独一个权重字段满足你的要求。
        5
    wenzhoou   206 天前 via Android
    @GGGG430 恩。说的不对。应该是和二楼类似的想法。a x^3 + b y^2+ cz。x 和 y 和 z 分别代表 浏览数 ,回复数 , 发布时间。然后你根据需要调整 a 和 b 和 c 的值。就能得到一个权重。
        6
    rogwan   206 天前 via iPhone
    这种计算不应该实时处理
        8
    GGGG430   205 天前
    @rogwan 你是怎么处理的呢?
    @liygheart Good!
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   716 人在线   最高记录 4236   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 21:50 · PVG 05:50 · LAX 13:50 · JFK 16:50
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1