用 PHP 计算总平均评分
Posted
技术标签:
【中文标题】用 PHP 计算总平均评分【英文标题】:Count total Average rating with PHP 【发布时间】:2017-12-03 10:42:40 【问题描述】:我将如何运行 PDO 查询,然后使用 php 处理结果以根据用户输入的评论输出特定空白的平均评分?
每条评论都根据 2 个标准加权,即服务和价格。这两个都是 0-5,因此最终平均得分为 10。每个评论基础我目前使用以下代码来计算特定评论的平均评分。
$rating_total = $row['review_service_rating'] + $row['review_price_rating'];
$average_rating = ($rating_total / 100) * 100;
因此,对于每条评论,review_service_rating 和 review_price_rating 都有 2 条 sql 行,这两者都满分 5。
但是我不确定如何计算所有评分,然后确定特定页面的基本评分(满分 10 分)。
假设我们有 3 条评论。此评论是 7/10、8/10 和 10/10。从逻辑上讲,我们会将所有数字相加,然后将所有 /10 相加给我们。 25/30 转换为 83.33 或在我的情况下为 8/10。这是我不确定如何做的两个步骤。
1 - 从 SQL 获取所有评级并计算它们
2 - 根据所有评分确定平均值 /10
用于从数据库中提取数据的当前 PDO 代码以及每个特定用户拥有的评论数。
$q = $db->prepare("SELECT * FROM reviews WHERE assigned_id = :review_id ORDER BY review_posted DESC");
$q->execute(array(':review_id' => $_GET['page_id']));
$r = $q->fetchAll(PDO::FETCH_ASSOC);
echo '<br><div class="well">Average Rating</div><br>';
foreach($r as $row)
$q = $db->prepare("SELECT * FROM users WHERE user_id = :review_user_id");
$q->execute(array(':review_user_id' => $row['user_id']));
$r = $q->fetch(PDO::FETCH_ASSOC);
$q = $db->prepare("SELECT COUNT(*) FROM reviews WHERE user_id = :review_user_id");
$q->execute(array(':review_user_id' => $row['user_id']));
$user_reviews = $q->fetchColumn();
【问题讨论】:
不是$average_rating = ($rating_total / 100) * 100
只是$rating_total
?
我一直在标签和问题中看到 PDO,但我没有看到任何与数据库相关的内容。在大多数情况下,数据库可以为您计算平均值
SELECT ( AVG(review_service_rating) + AVG(review_price_rating) ) AS average_rating, COUNT(review_service_rating) AS num_service_rating, COUNT(review_price_rating) AS num_price_rating FROM reviews WHERE assigned_id = :review_id ORDER BY review_posted DESC
对你有用吗?由于平均值从 0 到 5 不等,只需将它们相加即可得到 0 到 10 的总和。
@0111010001110000 你有它。当您添加平均值时,结果低于 10。因此,如果您得到 7.1
,只需附加字符串 /10
。如果您需要百分比,( 7.1 / 10 ) * 100
(= 71%) 会给您。
@0111010001110000 我建议你退后一步,重新考虑你的方法。在我看来,你做了一个简单的连接到一个循环和很多查询。您使用的“加权”和“平均”这两个词实际上并不是您在这里处理的。您只是将 2 个数字相加。
【参考方案1】:
假设每个用户给 x 点(限制为 10),你必须将它们相加(x)然后除以 rating_times,你得到平均评分。
例如
User 1 rate 7 User 2 rate 6 User 1 rate 5 => (7+6+5)/3 = 6
因此,您只需在用户评分时添加一个名为 point 的字段。 然后使用查询 SUM 到 SUM point 向上,除以查询 COUNT 然后完成。 忘记 (x**/10**)。
最后,使用 2 个平均评分(价格和服务),将它们的总和除以 2 得到总体评分。
【讨论】:
所以根据我的理解,我必须添加标准#1(服务)和标准#2(价格),这将给我一个 10 个组合点的值(每个标准加权 5) .在那之后,我会为 Jake 摩托车维修店计算总评论数。 SQL 将返回 3 条评论。之后我会运行数学。 这样的?function sum($a, $b) return $a + $b; $average_rating = explode('.', (string)(array_reduce($ratings, 'sum') / sizeof($ratings)))[0] . '%';
【参考方案2】:
这就是你可能想要做的事情:
$q = $db->prepare("
SELECT *
FROM review r
JOIN users u ON r.user_id=u.id
JOIN (SELECT user_id, COUNT(1) as count FROM review GROUP BY user_id) uc ON uc.user_id = u.id
WHERE r.assigned_id=:review_id
ORDER BY r.review_posted DESC");
$q->execute(array(':review_id' => $_GET['page_id']));
$r = $q->fetchAll(PDO::FETCH_ASSOC);
foreach ($r as $row)
// $row should have all fields included in $tables review and users as well as $row[count] would contain the total number of reviews a user made
这将包括用户的详细信息以及带有 assigned_id
的每条评论的评分详细信息
编辑:也添加了用户评论的总和。
【讨论】:
试图添加你的代码,打破了页面哈哈。无论如何,这里是 Review 页面的完整代码。 pastebin.com/raw/0m8b7Ycq @0111010001110000 可能值得做一个print_r($r); die()
以查看此查询的结果如何(假设它有效,我尚未对其进行测试)并查看它是否可以使用。
将值更改为正确的值并且它可以工作。有点愚蠢的问题,但我现在用什么来为每个用户显示 x 条评论?【参考方案3】:
你可以使用这个sn-p。
这帮助了我
https://gist.github.com/tiagofrancafernandes/1c5752ba2ebeb477975c6c016a37fc5c
【讨论】:
以上是关于用 PHP 计算总平均评分的主要内容,如果未能解决你的问题,请参考以下文章