Super hilfreiche Antwort von Blindy, hier ist der PHP-Code, der darauf basiert. Einige mögen nützlich sein. Die Ergebnisse sind 4,11 gemäß OP-Beispiel:
$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;
}
So erstellen Sie das oben genannte $ bewertungsarray
Beispiel für einen Pseudocode, der jedoch funktionieren sollte, um zu erklären, wie das Array $ reviews erstellt wird, wenn Informationen in der Datenbank gespeichert werden, vorausgesetzt, Sie haben eine Tabelle mit dem Namen "Bewertungen" und eine Spalte mit dem Namen "Bewertung". In diesem Fall ist es 1 Join, Sie müssten 4 Joins durchführen, um alle Bewertungen zu erhalten, aber dies sollte Ihnen den Einstieg erleichtern:
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
Ein anderer Ansatz wurde in den Kommentaren vorgeschlagen
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