我从我发现的一个片段中成功地为我的网站添加了“平均评分”,但我的PHP并不是很好,我想要显示多少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 :(得分: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-star.png,2-star.png并更改此行:
echo "<img src='http://www.example.com/$a-star.png'> : (" . (!empty($stars[$a]) ? $stars[$a] : 0) . ")<br/>";