MySQL评级/投票系统(考虑到投票数量,以最佳评级合法排序)

时间:2009-11-03 20:39:39

标签: mysql math sorting rating weighted-average

假设我有一个类似于这样的MySQL表:

软件表:

id int
name text
votes int
rating int

如果投票数是某人投票赞成该项目的次数,则评级将是这些投票的平均值。

示例数据:

id: 0
name: FooBar!
votes: 5
rating: 3

现在另一位用户出现并将其评为1.如何计算新的评级?每次有人像

一样投票时,最好再制作另一张桌子并输入新的一行
id int
software_id int
score int
user_id int

然后计算每次重新计算平均评分?我认为这会对服务器产生影响。

第二个问题:

我希望能够按最高评分订购该软件,但我不想要一个平均5星评级的节目,但只有1票的排名高于平均4的893票的节目。我该如何做到这一点?

1 个答案:

答案 0 :(得分:3)

问题1a:如何计算新的平均评级:

vote count : 5
average rating: 3

评分为1的新投票

             5*3+1
 new rating= ----- = 16/6 = 8/3 = 2.666.. 
               6

你必须考虑新投票的“权重”(所有投票的1/6)和旧的平均值(6个中的5个出现)。旧的平均值3计算5次,新评级一次=> 5 * 3 + 1 = 16.然后你除以总共6票。

问题1b:你应该存票吗?

真的取决于你是否期望成为游戏者而不是

我建议你这样做。