Дуже корисна відповідь від Blindy, ось PHP-код, який базується на ньому. Деякі можуть виявитися корисними. Результати становитимуть 4,11 за прикладом ОП:
$ratings = array(
5 => 252,
4 => 124,
3 => 40,
2 => 29,
1 => 33
);
function calcAverageRating($ratings) {
$totalWeight = 0;
$totalReviews = 0;
foreach ($ratings as $weight => $numberofReviews) {
$WeightMultipliedByNumber = $weight * $numberofReviews;
$totalWeight += $WeightMultipliedByNumber;
$totalReviews += $numberofReviews;
}
//divide the total weight by total number of reviews
$averageRating = $totalWeight / $totalReviews;
return $averageRating;
}
Як створити наведений вище масив оцінок $
Приклад псевдокоду, але який повинен працювати, що пояснює, як створити масив оцінок $, коли інформація зберігається в БД, припускаючи, що у вас є таблиця "рейтинги" та стовпець "рейтинг". У цьому випадку це 1 приєднання, вам потрібно буде зробити 4 приєднання, щоб отримати всі рейтинги, але це повинно почати:
SELECT count(c1.rating) as one_star, count(c2.rating) as two_star
FROM ratings c1
LEFT OUTER JOIN
ratings c2
ON
c1.id = c2.id
WHERE
c1.rating = 1
AND
c2.rating = 2
інший підхід, запропонований у коментарях
SELECT SUM(rating = 1) AS one_s ,SUM(rating = 2) AS two_s ,SUM(rating = 3) as three_s FROM reviews where product_id = 9