2011-11-03 47 views
2

我已经有一个5星评级系统(用户投票1-5 ...和平均得分显示 - 我有一个页面,他们投票,它插入数据库有用户名和投票),但是我现在想要通过整合某种权重来完善它,这种权力只是为了增加您的投票对内容的平均得分的影响。它会让你的投票“比”更重。将重量集成到5星级投票系统中?

我目前有一个$level(这是一个1-10之间的数字,每个用户都有......其中10是最高的,因此效果最好),我想用它来考虑。

我只是不确定如何去做这件事。

回答

1

如果用户有X级,则可以让他/她的投票权重为X级1票。您可以在另一个领域的“权重”添加到表中,并显示vote*weight平均:

SELECT AVG(weight * vote) 
FROM rating 
WHERE item = ? 

(其中你需要ID?)

如果你认为这是对你的需求太复杂(和您已经存储了投票的用户),您可以使用此查询:

SELECT AVG(r.weight * u.level) 
FROM rating 
JOIN user ON r.user_id = u.id 
WHERE r.item = ? 
+0

所以表中的权重列将包含用户投票*级别? – user962026

+0

@ user962026对于最后的评论我很抱歉(误读了某些内容):权重列将是用户的级别(如果它更适合您,可以将其命名为'级别')。我将它命名为“权重”,因为您可以独立于“级别”来改变它,例如以对数形式。 –

2

最简单的方法是在每个级别插入一个投票到数据库中。

for($i = 0; $i < $level; $i++) { 
    store_vote($user, $item); 
} 
+1

+1为最简单的可能解决方案。我在这里看到的唯一缺点是你不能在以后重新计算 - 我更喜欢加权方法,所以如果结果出奇怪,你可以改变权重并重新计算 - 但这当然是最简单的方法来做到这一点,情景,它会很好。如果这是一个简单的“超级用户获得两票”,我更倾向于使用它;不能修改权重的固有风险会让我犹豫是否会用这个10分制。 – Ian