簡體   English   中英

計算PHP中的平均評分系統

[英]Calculate Average Rating System in PHP

我有點困惑如何計算平均評分系統。 用戶已經完全可以提供費率,並將存儲在數據庫中,如下圖所示

評分表

因此,想法是averagestar的價值來自於平均評分表。 例如,prov @ gmail有4個輸入速率,平均值= 4,來自16/4。 (總星級/總房價)

從下面顯示的代碼中,我認為我的邏輯是錯誤的。 UPDATE平均SQL無法正常工作。

$sql= "
INSERT INTO rating VALUES 
(DEFAULT,'$prov', '$star','$detail', '$user')
";

$sql2="
DELETE FROM orderform 
 WHERE confirmation = 4 
   AND provider_username = '$prov' 
   AND user_username = '$user' 
   AND confirmation = 4
";

$sql3= "
SELECT AVG(rating) 
  FROM rating 
 WHERE provider_username = '$prov'
";

if (mysqli_query($conn, $sql) && mysqli_query($conn, $sql2)) {
$result = mysqli_query($conn, $sql3);
while($row = mysqli_fetch_array($result)) {
$sql= "
UPDATE theprovider 
   SET averagerating = '$result' 
 WHERE provider_username = '$prov'";
if (mysqli_query($conn, $sql)) {
echo 'success';    
}
}

有幫助嗎?

您不能SET averagerating='$result'您應該使用$ row中的內容進行更新。

嘗試:

$sql= "INSERT INTO rating VALUES (DEFAULT,'$prov', '$star','$detail', '$user')";
$sql2="DELETE FROM orderform WHERE confirmation=4 AND provider_username='$prov' AND user_username='$user' AND confirmation=4";
$sql3= "SELECT AVG(rating) AS myAvg FROM rating WHERE provider_username='$prov' GROUP BY provider_username";

if (mysqli_query($conn, $sql) && mysqli_query($conn, $sql2)) {
$result = mysqli_query($conn, $sql3);
while($row = mysqli_fetch_array($result)) {
$sql= "UPDATE theprovider SET averagerating='".$row["myAvg"]."' WHERE provider_username='$prov'";
if (mysqli_query($conn, $sql)) {
echo 'success';    
}
}

編輯:添加了GROUP BY子句。

AVG是一個聚合函數,因此應與GROUP BY一起使用。

SELECT AVG(rating) FROM rating WHERE provider_username = 'prov@gmail.com' GROUP BY provider_username;

 use for fill color in emty star <style type="text/css"> .overall-rating{font-size: 14px;margin-top: 5px;color: #8e8d8d;} .ratings { position: relative; vertical-align: middle; display: inline-block; color: #b1b1b1; overflow: hidden; } .full-stars{ position: absolute; left: 0; top: 0; white-space: nowrap; overflow: hidden; color: #fde16d; } .empty-stars:before, .full-stars:before { content: "\\2605\\2605\\2605\\2605\\2605"; font-size: 14pt; } .empty-stars:before { -webkit-text-stroke: 1px #848484; } .full-stars:before { -webkit-text-stroke: 1px orange; } </style> 
 star average rating dynamic from database using php try : - this code Datbase - <?php $sum=0; $sel_sups = my_select("SELECT SUM(Rating) AS sum,Count(UserId) AS User FROM tbl_rating WHERE ProductId='".$ProductId."'"); // hard coded in here value UserId And ProductId $result=json_decode($sel_sups); if($result->response==1){ foreach($result->result as $myresults){ $value = $myresults->sum; $sum = $value; $avg = $sum/$myresults->User; $no_format = number_format(floor($avg*100)/100,2, '.', ''); $percent = $avg*100/5; echo '<div class="ratings"> <div class="empty-stars"></div> <div class="full-stars" style="width:'.$percent.'%"> </div> </div>'.'<a href="#" data-toggle="modal" data-backdrop="static" data-target="#reviewmodel" style="background: #5F283D;padding:10px;color: #fff;font-size: 12px;margin-left:5%">Write a Review</a>'; echo '<div> <p style="font-size: 13px;color:#333;margin-left:1%;margin-top: 1%;">Average Rating '.$no_format.'</p> </div>'; } } ?> 

這是實現此目的的簡單方法:

<?php if(!empty($answer->AggRating)){ // This is fetched from your db
   $rating = (int)$answer->AggRating; // Converting it to integer
   $img="";
   $i=1;
   while($i<=$rating){
     $img=$img."<i class='fa fa-star' style='color: yellow;'></i>"; // You can edit your own html star.
     $i=$i+1;
   for($i=$rating+1; $i<=5; $i++){ // This is for non-star rating 
     $img=$img."<i class='fa fa-star'></i>";
   }
   echo $img;
} ?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM