2012-07-10 45 views
0

我正在使用數學算法來計算'whats hot'排序類型。它基本上會產生一個很長的數字浮點數,它考慮到時間以及給定時間範圍內的投票數。這個數學轉換看起來正確嗎? (ruby - > mysql)

我讓MySQL處理這個問題,以減少我的服務器上的負載,我想確保我不會錯過任何東西。這部分對我的應用程序非常重要。

下面是它應該如何工作的描述:http://amix.dk/blog/post/19588

數量:1134028003僅僅是定義的秒數爲應用程序的發佈DAT任意數,這樣的數字在零開始,隨着時間的推移,他們會慢慢成長,成長壯大。

這就是我現在的MySQL:

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 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 
+0

你應該爲它寫測試。測試一般值和角落案例。 – 2012-07-10 18:57:49

回答

0

貌似鏈接的公式,除非你使用的是雙IF而不是SIGN()

相關問題