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

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

  •  
  •   GGGG430 · 2018-06-28 18:03:43 +08:00 · 1437 次点击
    这是一个创建于 2358 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    8 条回复    2018-06-29 21:37:38 +08:00
    wenzhoou
        1
    wenzhoou  
       2018-06-28 18:49:03 +08:00 via Android
    听你这样子像是 a x^3 + b x^2+ cx
    ballshapesdsd
        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
    GGGG430
        3
    GGGG430  
    OP
       2018-06-28 20:07:38 +08:00
    @wenzhoou x 是什么意思呢
    @ballshapesdsd 没看懂这个公式...
    ballshapesdsd
        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 没有上界,那么应该是没有单独一个权重字段满足你的要求。
    wenzhoou
        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 的值。就能得到一个权重。
    rogwan
        6
    rogwan  
       2018-06-28 23:24:06 +08:00 via iPhone
    这种计算不应该实时处理
    GGGG430
        8
    GGGG430  
    OP
       2018-06-29 21:37:38 +08:00
    @rogwan 你是怎么处理的呢?
    @liygheart Good!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3215 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 05:03 · PVG 13:03 · LAX 21:03 · JFK 00:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.