Как мне выполнить запрос PDO, а затем обработать результаты с помощью PHP для вывода средней оценки для определенного пустого на основе отзывов, введенных пользователем?
Каждый отзыв оценивается по 2 критериям: услуга и цена. Оба эти значения равны 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. Это 2 шага, которые я не знаю, как это сделать.
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
? - person ctwheels   schedule 29.06.2017SELECT ( 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. - person Alejandro Iván   schedule 29.06.20177.1
, просто добавьте строку/10
. Если вам нужен процент,( 7.1 / 10 ) * 100
(= 71%) предоставит его вам. - person Alejandro Iván   schedule 29.06.2017