2012-02-11 66 views
-1

我建立共享一些東西的應用程序...最佳實踐和更

每個對象都可以被評爲擁有評級1..5開始。我保留每個星的費用數量,因此可以計算平均費率。

所以每次的OBJ我有:平均速率和總速率。 我需要得到Top10評級的Obj - 所以可以使用AvgRate + TotalRate(那些誰擁有這些值爲top10)。

我想在服務器中有一個SQL表是這樣的: OBJID(指數),totalRate,AvgRate ... 如果能夠有這個表進行排序,這樣可以得到TOP10作爲第10? 如何用我想要的計算查詢top10?

此外 - 我需要獲得每用戶top10。所以每個用戶我擁有他共享的所有Obj,因此可以擁有這些Obj的所有費率 - 如前所述,每個Obj都具有所有信息。

我需要知道如何計算用戶速率,並且也 - 如何快速獲得TOP10。

任何想法?

+0

不知道如果我理解,但你不能只需按升序排序並將結果限制爲10 – 2012-02-11 11:06:13

回答

2

後來編輯:對不起,寫這個答案的時候不明白你的問題,會離開它仍然爲他人..


什麼是你的TotalRate公式? 「你可以使用AvgRate + TotalRate來做到這一點」你爲什麼總結一個平均值到TotalRate--無論這是什麼?

最佳做法是始終逐漸計算總和/平均值。 我想此模型的OBJ:

  • 率的總數接收
  • 乙點的總和接收
  • Ç平均(浮動:B/A)
  • d - 外鍵用戶(Obj的作者/所有者)

當對象接收到速率X時,您重新計算A = A + 1,B = B + X,C = B/A。 以相同的方式預先計算總和/平均值。因此,如果Obj屬於用戶,則向用戶模型/表創建相同的字段(A,B,C),並且當Obj接收到速率X時,還更新用戶D(Obj的所有者)的A,B,C值。然後,選擇排名前10位的用戶時,你不需要用OBJ表加入(可能獲得巨大的),你只能選擇用戶 - 由B或C柱下降,限制10

+0

這是一種簡單的方法 - 但是如果Obj有5個(例如)1的比率,那麼它將會位於前10位,但它只有1個比率....顯然,它不能在TOP10的時候有跟的OBJ 4率1000個用戶(例如剛) – user1136875 2012-02-11 11:15:53

+0

總速率爲1個* numOfRatesFor1Star + ... + 5 * numOfRatesFor5Star ......所以在前面的評論中提及的額定 - 需要獲得TOP10不僅要根據平均匯率計算,還要根據評分人數來計算 – user1136875 2012-02-11 11:18:05

+1

好吧,現在我明白了,您需要根據平均匯率和匯率計算普及公式。我認爲你需要尋找「流行algorythms」。大多數人都會計算最近的利率的頻率,以便「老」職位被埋起來。 – 2012-02-11 11:23:09