我如何运行PDO查询,然后使用PHP处理结果,根据用户输入的评论输出特定空白的平均评分?
每项审核都根据服务和价格两个标准进行加权。这两个都是0-5,因此最终平均值的权重为10.每个审核基础我目前使用以下代码来计算特定审核的平均评分。
$rating_total = $row['review_service_rating'] + $row['review_price_rating'];
$average_rating = ($rating_total / 100) * 100;
因此,对于每个评论,有2个sql行用于review_service_rating和review_price_rating,这两个都是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();
答案 0 :(得分:1)
假设每个用户给出x点(限制为10),你必须将它们相加(x)然后除以rating_times,得到平均等级。
例如
SendMail
因此,当用户评分为点时,您只需添加一个字段。 然后使用查询SUM来SUM point 向上,再用查询COUNT然后完成。 忘了(x ** / 10 **)。
最后,使用2个平均评级(价格和服务),它们的总和除以2,你得到整体评价。
答案 1 :(得分:0)
以下是您可能要做的事情:
$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
编辑:添加了用户评论的总和。