GGGG430
V2EX  ›  问与答

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

  •  
  •   GGGG430 · Jun 28, 2018 · 1842 views
    This topic created in 2967 days ago, the information mentioned may be changed or developed.

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

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

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

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

    8 replies    2018-06-29 21:37:38 +08:00
    wenzhoou
        1
    wenzhoou  
       Jun 28, 2018 via Android
    听你这样子像是 a x^3 + b x^2+ cx
    ballshapesdsd
        2
    ballshapesdsd  
       Jun 28, 2018
    假设浏览数上限是 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
       Jun 28, 2018
    @wenzhoou x 是什么意思呢
    @ballshapesdsd 没看懂这个公式...
    ballshapesdsd
        4
    ballshapesdsd  
       Jun 28, 2018
    @GGGG430 #3 你要有两个变量 x,y,想要把这两个变量变成一个权重 z,保证 orderby z 等价于 orderby x,y。
    需要知道 y 的最大可能值,比如说是 m。
    那么 z=m*x+y 可以满足你的要求。
    多个变量类似。
    如果 y 没有上界,那么应该是没有单独一个权重字段满足你的要求。
    wenzhoou
        5
    wenzhoou  
       Jun 28, 2018 via Android
    @GGGG430 恩。说的不对。应该是和二楼类似的想法。a x^3 + b y^2+ cz。x 和 y 和 z 分别代表 浏览数 ,回复数 , 发布时间。然后你根据需要调整 a 和 b 和 c 的值。就能得到一个权重。
    rogwan
        6
    rogwan  
       Jun 28, 2018 via iPhone
    这种计算不应该实时处理
    GGGG430
        8
    GGGG430  
    OP
       Jun 29, 2018
    @rogwan 你是怎么处理的呢?
    @liygheart Good!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1094 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 80ms · UTC 23:08 · PVG 07:08 · LAX 16:08 · JFK 19:08
    ♥ Do have faith in what you're doing.