2

我有 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。

我怎样才能做到这一点?对不起,我不会数学。

4

3 回答 3

2

如果你想要一个1-10的比例,

您所要做的就是将他们的总分除以 2。因此,如果他们 20 分中有 15 分,则相当于 10 分中有 7.5 分。>因为15/20 = 0.75 和 7.5/10 一样

于 2013-08-29T20:54:38.807 回答
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 )
于 2013-08-29T21:09:24.427 回答
-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      
于 2014-09-08T17:10:31.583 回答