我有4套星级评级小工具,可以保存到我的数据库,每颗星的值(1-5),用户可以使用这些4星组给其他用户评分。
类似的东西:
is user x a jealous person? * * // (=2)
is user x a happy person? * * * * // (=4)
is user x a clever person? * * * * * // (=5)
is user x a humble person? * * * * * // (=5)
所以投票后我得到了这样的记录:
*mysql sample row data
-------------------------------------------------------------------
ID from_user_id to_user_id rate_value
-------------------------------------------------------------------
1 2234 123 2
2 2234 123 4
3 2234 123 5
4 2234 123 5
-------------------------------------------------------------------
运行某种查询。 结果如下
id=1
from_user_id = 2234
to_user_id = 123
a1=2
a2=4
a3=5
a4=5
用户可以获得的最佳分数是20。
在用户有两个或更多分数行后,我想为他保存一个十进制分数,从0到10,比如说:7.1。
我该怎么做?对不起,我不能数学。
答案 0 :(得分:2)
如果您想要 1-10 比例,
你所要做的就是将总分除以2。 因此,如果他们有20个中的15个,则相当于10个中的7.5个。>因为 15/20 = 0.75和7.5 / 10 。
答案 1 :(得分:1)
好吧,首先我们需要确定你的得分为10分。如果我们将它从星星上取下来,它们只会达到5,所以我们会加倍它。
//Initialize Variable
$score = 0;
//Use for loop to go through $row['a#'] values
for( $x = 1; $x < 5; ++$x )
{
//Add $row['a#'] after multiplying
$score += ( $row['a'.$x] * 2 );
}
//divide by 4 (number of scores) and round to first decimal spot
$score = round( $score/4, 1 );
echo $score; //Outputs 8 ( 4+8+10+10 = 32 => 32/4 = 8 )
答案 2 :(得分:-1)
Algorithm: Calculate_Average_Star_Rating ( )
1. for each (product exixts in table_product HDB) do
2. for each (Authenticated user rate for respective product in table_rating HDB) do
3. Read corresponding weight from ratings column in table_rating HDB
Calculate Weighted_Mean = ∑ ( weight * number of users at that weight )/
Total number of users
4. end for
5. Store Weighted_Mean in corresponding rows avg_rating column in table_product HDB
6. end for