2012-11-30 83 views
1

我想從數據庫返回排序列表。我想使用的功能可能看起來像通過自定義函數對數據庫的查詢結果進行排序

(field1_value * w1 + field2_value * w2)/(1 + currentTime-createTime(field3_value)) 

這是我的應用程序的sort by popularity功能。

我不知道別人怎麼做這種在DB排序(說的MySQL)

我要在Django最終實現這一點,但在大方向/戰略發表任何評論來實現,這是最歡迎。

  • 我是否爲每個 請求定義一個函數並計算行的分數?
  • 我是否爲此分數預留了一個字段並定期計算分數 ?
  • 或使用時間作爲排序變量 函數看起來不好?
  • 其他網站如何實現「按人氣排序」?

我把時間變量,因爲我想要更新的帖子得到更多的關注。

回答

1
  1. 難道我定義一個函數,計算得分行對每個請求?

    你可以做,但它不是必需的:你可以簡單地提供一個表達你的ORDER BY條款(分母不影響結果的順序的1 + currentTime一部分,所以我已刪除了它):

    ORDER BY (field1 * w1 + field2 * w2)/UNIX_TIMESTAMP(field3) DESC 
    

    另外,如果您的查詢是選擇這樣的評價,你可以僅僅ORDER BY的別名的列名:

    ORDER BY rating 
    
  2. 我是否爲此分數預留了一個字段並計算分數?

    我不知道你爲什麼會需要在固定時間間隔計算(如上面提到的,分母的恆定部分具有順序結果沒有影響)—,但如果你要存儲上述表達式在其自己的字段中的結果,然後執行ORDER BY操作將會非常快(特別是如果該新字段被適當地索引)。

+0

感謝您的迴應!我想問一下這兩種策略是否比其他策略更受歡迎。計算每個請求的分數與分批計算分數......無論如何,我擔心隨着表格行數越來越多,它會變慢。總之,應用可以擴展的排序的好策略是什麼? – eugene

+0

@Eugene:看到我對上面#2的回答。 – eggyal

+0

對於預計會增長的表是否可行? – eugene

相關問題