2015-08-22 67 views
1

我正在關注發現的教程here,我似乎無法弄清楚如何從db中的收視率中填充星星。基本上,我想要在用戶提交自己的評級之前顯示目前的評分和計數顯示多少評級。 我不想動態建立我需要的評級的產品列表,我只需要ID發佈和評級計數生成每個數據ID ...PHP mysql star rating

--UPDATE我能夠發佈的評級,但我需要爲每個產品分配一個ID。我能得到的值只是一個價值,但我想我需要分配一個變種,這樣我可以拉他們對於任何給定的產品

產品:

<div class="store-item-rating text-warning rate-ex1-cnt" id ="1"> 
    <div id="1" class="rate-btn-1 rate-btn"></div> 
    <div id="2" class="rate-btn-2 rate-btn"></div> 
    <div id="3" class="rate-btn-3 rate-btn"></div> 
    <div id="4" class="rate-btn-4 rate-btn"></div> 
    <div id="5" class="rate-btn-5 rate-btn"></div> 
</div> 

<div class="store-item-rating text-warning rate-ex2-cnt" id ="2"> 
    <div id="1" class="rate-btn-1 rate-btn"></div> 
    <div id="2" class="rate-btn-2 rate-btn"></div> 
    <div id="3" class="rate-btn-3 rate-btn"></div> 
    <div id="4" class="rate-btn-4 rate-btn"></div> 
    <div id="5" class="rate-btn-5 rate-btn"></div> 
</div> 

的JS

$(function(){ 
     $('.rate-btn').hover(function(){ 
      $('.rate-btn').removeClass('rate-btn-hover'); 
      var therate = $(this).attr('id'); 
      for (var i = therate; i >= 0; i--) { 
       $('.rate-btn-'+i).addClass('rate-btn-hover'); 
      }; 
     }); 

     $('.rate-btn').click(function(){  
      var therate = $(this).attr('id'); 
      var dataRate = 'act=rate&product_id=<?php echo $product_id; ?>&rate='+therate; // 
      $('.rate-btn').removeClass('rate-btn-active'); 
      for (var i = therate; i >= 0; i--) { 
       $('.rate-btn-'+i).addClass('rate-btn-active'); 
      }; 
      $.ajax({ 
       type : "POST", 
       url : "inc/ajax.php", 
       data: dataRate, 
       success:function(){} 
      }); 

     }); 
    }); 

計數

 <div class="box-result-cnt"> 
     <?php 
      $query = mysql_query("SELECT * FROM tbl_rating"); 
      while($data = mysql_fetch_assoc($query)){ 
       $rate_db[] = $data; 
       $sum_rates[] = $data['rate']; 
      } 
      if(@count($rate_db)){ 
       $rate_times = count($rate_db); 
       $sum_rates = array_sum($sum_rates); 
       $rate_value = $sum_rates/$rate_times; 
       $rate_bg = (($rate_value)/5)*100; 
      }else{ 
       $rate_times = 0; 
       $rate_value = 0; 
       $rate_bg = 0; 
      } 
     ?> 
     <hr> 
     <h3>The content was rated <strong><?php echo $rate_times; ?></strong> times.</h3> 
     <hr> 
     <h3>The rating is at <strong><?php echo $rate_value; ?></strong> .</h3> 
     <hr> 
     <div class="rate-result-cnt"> 
      <div class="rate-bg" style="width:<?php echo $rate_bg; ?>%"></div> 
      <div class="rate-stars"></div> 
     </div> 
     <hr> 

    </div> 
+0

您會告訴我們您到目前爲止嘗試過的嗎? – Schwern

回答

0

假設您只能評價1個產品(如演示那樣)。爲了得到額定電流,您可以選擇所有的收視率,並取它們的平均值:

Current rating: SELECT AVG(rate) FROM tbl_rating 
Number of ratings: SELECT COUNT(*) FROM tbl_rating 

現在,如果你需要知道的評級爲當前用戶:

SELECT rate FROM tbl_rating WHERE user_id = $userIPAdress 

如果你添加一個product_id列到tbl_rating表能夠對多個產品進行評分,只需添加一個WHERE子句:

Current rating: SELECT AVG(rate) FROM tbl_rating WHERE product_id = $productId 
Number of ratings: SELECT COUNT(*) FROM tbl_rating WHERE product_id = $productId 
+0

我已經添加了product_id的附加列,因爲我注意到了同樣的事情。我遇到的真正問題是從每個產品調用評分。因此,基本上,產品一和二是靜態的並且有ID,但我在調用評級和填充index.php中的星星方面存在問題 - 似乎缺少某些PHP參數,或者我沒有看到或者太累了,看不到... – Smcner12

+0

它不適用於最後2個查詢?他們會向您返回特定產品的平均評分(=星星數)以及評分數。如果你想要所有產品的這些值,你可以這樣做:'SELECT AVG(rate)FROM tbl_rating GROUP BY product_id'和'SELECT COUNT(*)FROM tbl_rating GROUP BY product_id' – Adrien

+0

第一個實際上工作 - 看到我的更新以上代碼。我現在唯一的問題是爲每個可以調用的產品分配一個id – Smcner12