【问题标题】:StackOverflow's Popularity algorithm in MySQLStackOverflow 在 MySQL 中的流行度算法
【发布时间】:2009-10-20 11:05:34
【问题描述】:

你会如何在 MySQL 中编写 SO 的流行度算法?

算法详解在这里:Popularity algorithm

谢谢!

【问题讨论】:

    标签: mysql algorithm math


    【解决方案1】:

    比较简单。

    t = (time of entry post) - (Dec 8, 2005)
    

    您可以将日期值转换为时间戳(您可以使用unix_timestamp),这会为您提供一个可用于其余比较的整数。

    x = upvotes - downvotes
    

    这个应该很简单...显然 MySQL 支持减法。

    y = {1 if x > 0, 0 if x = 0, -1 if x < 0)
    z = {1 if x < 0, otherwise x}
    

    对于这些,请查看 MySQL 的 case 语句。

    log(z) + (y * t)/45000
    

    MySQL 有一个log 函数,所以这个应该也很简单,只是简单的数学运算。

    而且,您可以通过 select 声明将它们联系在一起。您可以使用user-defined variablesselect 语句中存储中间计算。例如:

    select @x := (upvotes - downvotes) as x,
           (@x > 4) as isXGreaterThanFour
    

    【讨论】:

    • 如何在 CASE 语句中使用 'x' (upvotes-downvotes)?
    • 我添加了一个如何使用变量进行中间计算的示例
    • 你能把它完整地写出来吗?我在这里还是很困惑……
    猜你喜欢
    • 2010-12-30
    • 2012-06-23
    • 2011-01-30
    • 2013-10-13
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多