2017-10-15 42 views
0

我的产品相当于介质和全如何计算产品估值系统的正确百分比?

例的明星价值的系统:

0.5 - 1 - 1.5 - 2 - 2.5 - 3 - 3.5 - 4 - 4.5 - 5

我得到的数据正确地采取两个数据一个中等和整体和总和两个值

从以下咨询:

//we define in a variable the id of the product valued by the valuation system 
$id_product = 1; 

//we obtain an average and integer value equivalent to 4.5 and 5 
$stmt = $con->prepare("SELECT SUM(rating) as total FROM ratings WHERE id_product=? AND rating in(4.5,5)"); 
$stmt->bind_param("i",$id_product); 

$stmt->execute(); 
$stmt->bind_result($sum); 

while ($stmt->fetch()) { 
    echo $sum; 
} 

//we obtain an average and integer value equivalent to 3.5 and 4 
$stmt = $con->prepare("SELECT SUM(rating) as total FROM ratings WHERE id_product=? AND rating in(3.5,4)"); 
$stmt->bind_param("i",$id_product); 

$stmt->execute(); 
$stmt->bind_result($sum); 

while ($stmt->fetch()) { 
    echo $sum; 
} 

//we obtain an average and integer value equivalent to 2.5 and 3 
$stmt = $con->prepare("SELECT SUM(rating) as total FROM ratings WHERE id_product=? AND rating in(2.5,3)"); 
$stmt->bind_param("i",$id_product); 

$stmt->execute(); 
$stmt->bind_result($sum); 

while ($stmt->fetch()) { 
    echo $sum; 
} 

//we obtain an average and integer value equivalent to 1.5 and 2 
$stmt = $con->prepare("SELECT SUM(rating) as total FROM ratings WHERE id_product=? AND rating in(1.5,2)"); 
$stmt->bind_param("i",$id_product); 

$stmt->execute(); 
$stmt->bind_result($sum); 

while ($stmt->fetch()) { 
    echo $sum; 
} 

//we obtain an average and integer value equivalent to 0.5 and 1 
$stmt = $con->prepare("SELECT SUM(rating) as total FROM ratings WHERE id_product=? AND rating in(0.5,1)"); 
$stmt->bind_param("i",$id_product); 

$stmt->execute(); 
$stmt->bind_result($sum); 

while ($stmt->fetch()) { 
    echo $sum; 
} 

现在我的问题是如何能够正确计算数据百分比和得到的结果像下面的图片:

enter image description here

+0

'Sumo'?就像'摔角'一样? – Strawberry

+0

@Strawberry不是那么严重只有一个正确的错误可以说他的意思是“总和” –

回答

1

中的百分比表格基于计数,而不是评分值的总和。

您可以在一个查询中完成所有这些工作,您无需为每个评估范围单独查询。

$stmt = $con->prepare(' 
    SELECT SUM(rating IN (4.5, 5))/COUNT(*)*100 AS pct_5_star, 
      SUM(rating IN (3.5, 4))/COUNT(*)*100 AS pct_4_star, 
      SUM(rating IN (2.5, 3))/COUNT(*)*100 AS pct_3_star, 
      SUM(rating IN (1.5, 2))/COUNT(*)*100 AS pct_2_star, 
      SUM(rating IN (0.5, 1))/COUNT(*)*100 AS pct_1_star, 
      AVG(rating) AS avg_rating 
    FROM ratings 
    WHERE id_product = ?'); 
$stmt->bind_param('i', $id_product); 
$stmt->execute(); 
$percents = array(; 
$stmt->bind_result($percents[5], $percents[4], $percents[3], $percents[2], $percents[1], $avg_rating); 
if ($stmt->fetch()) { 
    for ($i in array(5, 4, 3, 2, 1)) { 
     echo "%i stars: " . round($percents[$i]) . "%<br>"; 
    } 
    echo "Average rating: $avg_rating<br>"; 
} else { 
    echo "This product is not yet rated<br>"; 
} 
+0

,并以这种方式如何显示个人百分比作为图像即几个客户投票明星10%的客户,例如 – Alex

+0

使条的长度取决于'pct _#_ star'。 – Barmar

+0

PHP具有图像功能,可让您创建特定大小的矩形。 – Barmar