计算用户费率的最佳做法等

时间:2012-02-11 10:57:54

标签: sql rating

我正在构建一个共享一些内容的应用程序......

每个对象都可以评级为1..5开始。我保留每个星的费率数,因此可以计算平均费率。

所以根据Obj,我有:平均费率和总费率。 我需要获得前10名Obj - 所以可以使用AvgRate + TotalRate(那些将这些值作为top10)。

我希望在服务器中有一个像这样的sql表: ObjId(index),totalRate,AvgRate ...... 如果可能的话,可以将此表排序,以便将top10作为前10个? 如何用我想要的计算查询top10?

另外 - 我需要获得每位用户的前10名。所以每个用户我拥有他共享的所有Obj,所以可以拥有这些Obj的所有费率 - 如前所述,每个Obj的所有信息。

我需要知道如何计算用户费率,以及 - 如何快速获得前10名。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

后来编辑:对不起,在写这个答案时不明白你的问题,还要留给其他人..


您的TotalRate公式是什么?你是什​​么意思“使用AvgRate + TotalRate可以做到这一点”为什么你要将TotalRate的平均值加起来 - 不管是什么?

最佳做法是始终逐步计算总和/平均值。 我会像这样建模Obj:

  • 收到的总费率
  • B收到的总积分
  • C average(float: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。