2015-07-03 43 views
1

我成功地從我發現的代碼片段中向我的網站添加了「平均評分」,但我的PHP並不好,我最好想要顯示1 *,2 *,3 *,4 *和5 *評論每個都已經完成,如果這是有道理的。(WordPress的/ WPDB/WP客戶評論)計數1 *,2 *,3 *,4 *和5 *評論的數量?

所以我可以告訴它像這樣在我的網站:

  • 1 *點評:2條

  • 2 *點評:4

  • 3 *點評:3

  • 4 *評論:12

  • 5 *點評:34

任何體面的PHP知識將可能能夠從我已用於平均等級代碼,這是下面的圖了這一點:

<?php global $wpdb; 
    $pId = $post->ID; //if using in another page, use the ID of the post/page you want to show ratings for. 
    $row = $wpdb->get_results("SELECT COUNT(*) AS `total`,AVG(review_rating) AS `aggregate_rating`,MAX(review_rating) AS `max_rating` FROM wp_wpcreviews WHERE `page_id`= $pId AND `status`=1"); 
    $max_rating = $row[0]->max_rating; 
    $aggregate_rating = $row[0]->aggregate_rating; 
    $total_reviews = $row[0]->total; 
    $totl = $aggregate_rating * 20; 
    $wpdb->flush(); 
?> 

<div id="overall-rating"> 
    <div class="sp_rating" id="wpcr_respond_1"> 
     <div class="base"> 
      <div style="width: <?php echo $totl;?>%" class="average"></div> 
     </div> 
     <br /> 
     <p>From <?php echo ' ' . $total_reviews;?> reviews</p> 
    </div> 
</div> 

,你可以請參閱1到5的評分存儲在「wp_wpcreviews」表內的「review_rating」列中,那麼有沒有辦法讓我分別計算每個評分?

「review_rating」表中的值僅存儲爲「1」,「2」,「3」,「4」或「5」。

在此先感謝您的回覆,一直堅持這一段時間!

+0

當然,但你仍然可以看到代碼,對不對?該代碼正在我的網站上工作,只是將其包含在此處,因爲我認爲它有助於查看平均評分如何顯示給某人提出分別計算每個星級評分的解決方案。它顯示了數據需要從哪裏提取。 –

+0

乾杯。第一次在這裏發佈。 :) –

回答

1

從外觀上看,你應該可以稍微調整一下mysql來得到你需要的東西。請嘗試以下操作:

global $wpdb; 
$pId = $post->ID; //if using in another page, use the ID of the post/page you want to show ratings for. 
$row = $wpdb->get_results("SELECT COUNT(*) AS `total`,review_rating FROM wp_wpcreviews WHERE `page_id`= $pId AND `status`=1 GROUP BY review_rating"); 

foreach($row as $r) 
{ 
    echo $r->review_rating . " Star Ratings: (" . $r->total . ")<br/>"; 
} 

我敢肯定,這將工作或得到你90%的方式出現。我假設你只對整體數據評分,所以沒有4.5的評分等,我也認爲它將分數中的評分保存爲5,對於5等於4,對於4等等,我相信這是肯定的。

如果這不起作用,也許表中的幾行可能對我們有所幫助。

另一個要考慮的是使用的參數,例如:

$results = $wpdb->get_results(
        $wpdb->prepare(
           "SELECT COUNT(*) AS `total`,review_rating FROM wp_wpcreviews WHERE `page_id`= %d AND `status`=1 GROUP BY review_rating",$pId 

          ) 
          ); 

的區別是在查詢中prepare方法和%d而不是使用一個變量。我可能是正確的或我可能是錯的,但使用這將阻止任何SQL注入問題等

更新

與MySQL的問題是,它只會存在的收視率,所以如果你有說一些只有一個星級評分,以上只會列出有關一個星級評分的信息。如果你想顯示所有明星,無論審查是否存在類似下面應該爲你做這個(只需更換的foreach在上面的例子):

foreach($row as $r) 
{ 
    $stars[$r->review_rating] = $r->total; 
} 

$a = 1; 
while($a < 6) 
{ 
    echo $a . " Star Ratings: (" . (!empty($stars[$a]) ? $stars[$a] : 0) . ")<br/>"; 
    $a++; 
} 

然後你可以說有圖像,即1-星。png,2-star.png並更改此行:

echo "<img src='http://www.example.com/$a-star.png'> : (" . (!empty($stars[$a]) ? $stars[$a] : 0) . ")<br/>"; 
+0

感謝您的迴應,您的代碼給了我奇怪的下列輸出:4:25:10 - 值存儲爲一個數字,例如1星評級爲「1」。 –

+0

@TomGreen我已經稍微更改了代碼,以便讀取輸出更容易,請讓我知道結果。 –

+0

啊,是的!這是正確顯示,代碼可以按照1星級,2星級等分解 - 以便我可以顯示不同的星形圖像,然後顯示該評級的評論數量?希望這是有道理的。再次感謝您的幫助,非常感謝。 –