MySQL评级/投票系统(考虑到投票数,按最佳评级准确排序)

MySQL评级/投票系统(考虑到投票数,按最佳评级准确排序),mysql,math,sorting,rating,weighted-average,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 然后再计算每次的平均评

假设我有一个类似以下内容的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票的程序。我将如何做到这一点?

问题1a:如何计算新的平均评级: 新的投票结果为1分

             5*3+1
 new rating= ----- = 16/6 = 8/3 = 2.666.. 
               6
你必须考虑新选票和旧选票的“权重”(占所有选票的1/6)和旧平均数(6次中的5次)。。旧的平均值3计算5次,新的平均值1次=>5*3+1=16。然后除以总共收到的6张选票

问题1b:你应该储存选票吗? 这取决于你是否希望成为游戏玩家


我建议你这样做。

因此公式是{average_rating=(old_vote_count*old_rating+new_rating)/(old_vote_count+1)}
             5*3+1
 new rating= ----- = 16/6 = 8/3 = 2.666.. 
               6