MySQL中的StackOverflow流行度算法

时间:2009-10-20 02:42:03

标签: mysql algorithm math

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

此处详细说明了算法:Popularity algorithm

谢谢!

1 个答案:

答案 0 :(得分:2)

这相对简单。

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