这个数学转换看起来正确吗?(ruby->;mysql)
我用一个数学算法来计算“What's hot”排序类型。它基本上生成一个长的多位数浮点数,该浮点数考虑了时间和给定时间跨度内的投票数 我让mysql来处理这个问题,以减少服务器上的负载,我想确保我没有遗漏任何东西。这部分在我的应用程序中非常重要 以下是对其工作原理的描述: 数字:1134028003只是一个任意的数字,它定义了应用程序发布日期的秒数,这样一来,数字从零开始,随着时间的推移,它们慢慢地增长 以下是我现在为mysql所做的:这个数学转换看起来正确吗?(ruby->;mysql),mysql,ruby-on-rails,ruby,database,math,Mysql,Ruby On Rails,Ruby,Database,Math,我用一个数学算法来计算“What's hot”排序类型。它基本上生成一个长的多位数浮点数,该浮点数考虑了时间和给定时间跨度内的投票数 我让mysql来处理这个问题,以减少服务器上的负载,我想确保我没有遗漏任何东西。这部分在我的应用程序中非常重要 以下是对其工作原理的描述: 数字:1134028003只是一个任意的数字,它定义了应用程序发布日期的秒数,这样一来,数字从零开始,随着时间的推移,它们慢慢地增长 以下是我现在为mysql所做的: def self.with_hot_ranking
def self.with_hot_ranking
select("resources.*, (
round(
log10(greatest(abs(resources.score),1)) +
if(resources.score > 0, 1, if(resources.score < 0, -1, 0)) *
(UNIX_TIMESTAMP(resources.created_at)-1134028003) /
45000.0
, 7)
) hot_ranking")
end
def self.with_hot_排名
选择(“资源”(
圆形(
log10(最大(abs(resources.score),1))+
if(resources.score>0,1,if(resources.score<0,-1,0))*
(UNIX_时间戳(resources.created_at)-1134028003)/
45000
, 7)
)热门排行榜)
结束
这是我的实例方法,仅用于测试目的。我想确保这也是正确的。这似乎太快了,我不知道为什么
def hot_ranking
# to sort by hot_ranking use the class method with_hot_ranking instead i.e.
# Resource.with_hot_ranking.order('hot_ranking DESC')
s = self.score
order = Math.log10([s.abs, 1].max)
sign = s <=> 0
seconds = epoch_seconds(self.created_at).to_i - 1134028003
(order + sign * seconds / 45000).round_to(7).to_f
end
def hot_排名
#要按热门排名进行排序,请使用带有热门排名的类方法,即。
#资源。具有热排名。顺序('hot\u ranking DESC')
s=自我评分
order=Math.log10([s.abs,1].max)
符号=s 0
秒=历元秒(自创建的秒数)至秒i-1134028003
(订单+签名*秒/45000)。四舍五入到(7)。到
结束
看起来像链接的公式,除非您使用的是双精度IF
而不是符号()
您应该为它编写测试。测试一般值和拐角情况。