2

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

软件表:

id int
name text
votes int
rating int

其中 votes 是某人对该项目投票的次数,而 rating 是这些投票的平均值。

示例数据:

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

现在另一个用户出现并给它评分 1。我将如何计算新的评分?每次有人投票时最好只制作另一张桌子并输入一个新行

id int
software_id int
score int
user_id int

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

第二个问题:

我希望能够按评分最高的方式订购软件,但我不希望平均评分为 5 星但只有 1 票的程序排名高于平均评分为 4 的程序(893 票)。我将如何做到这一点?

4

1 回答 1

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:您应该存储选票吗?

真的取决于你是否期望成为游戏玩家

我建议你这样做。

于 2009-11-03T20:46:24.730 回答