2016-03-31 13 views
2

ich den Durchschnitt für ein Rating-System berechnet werden soll, aber ich habe normale Tabelle in InnoDB und eine Spalte in json mit dem Namen: „Bewertungen“ mit dieser Struktur:berechnen den Durchschnitt für ein Rating-System

{"comments": 
    [ 
     {"name": "Jonh", "text": "nice phone", "star": 4}, 
     {"name": "igon", "text": "not good", "star": 2}, 
     {"name": "marco", "text": "i not like this", "star": 3}, 
     {"name": "david", "text": "good product", "stelle": 5} 
    ] 
} 

Jetzt Ich muss den durchschnittlichen Stern berechnen. ist es in SQL oder in PHP? In SQL Ich weiß nicht, wie, in PHP ich das Problem mit der Abfrage für Extrakt nur die alle Sterne, zum Beispiel:

$reviews_nn = $rowprod["reviews"]; 
$reviews = json_decode($reviews_nn,true); 
$max = 0; 
$n = 0; 
foreach ($reviews[comments][star] as $rate => $count) { 
    echo 'Seen ', $count, ' ratings of ', $rate, "\n"; 
    $max += $rate * $count; 
    $n += $count; 
} 
echo 'Average rating: ', $max/$n, "\n"; 

Aber das Ergebnis NAN ist ... ganze Zahl ist, nicht wahr? Es ist eine ganze Zahl in star ...
Stern = 4
nicht Stern = "4"

Ich hoffe, dass Sie mir helfen können .... Tanks !!!

+0

Was ist das? $ Reviews_nn = $ rowprod ["reviews"]; '? und auch '$ reviews ['comments'] ['star'] als $ rate => $ count', aber immer noch wird es nicht funktionieren ich denke –

+1

' $ bewertungen [kommentare] [star] 'ist kein Array .. sicherlich .. – DevDonkey

+0

Wie so oft ist die Lösung, Ihre Daten zu normalisieren. – symcbean

Antwort

2

Ihr Code ist überhaupt nicht verständlich, aber ich schaffe ein Beispiel für Sie und ich denke, es wird helfen, Ihr Problem zu lösen: -

<?php 
$data = '{"comments": [{"name": "Jonh", "text": "nice phone", "star": 4}, {"name": "igon", "text": "not good", "star": 2}, {"name": "marco", "text": "i not like this", "star": 3}, {"name": "david", "text": "good product", "stelle": 5}]}'; // your json data 

//$reviews_nn = $rowprod["reviews"]; // i don't get from where you are getting this 
$reviews = json_decode($data,true); // decode the json data 
$max = 0; 
$n = count($reviews['comments']); // get the count of comments 
echo "<pre/>";print_r($reviews); // print json decoded data 
foreach ($reviews['comments'] as $rate => $count) { // iterate through array 
$max = $max+$count['star']; 
} 
echo 'Average rating: ', $max/$n, "\n"; 
?> 

Ausgang: - https://eval.in/545582

Hinweis: - I habe Ihre json Daten genommen, aber den Variablennamen geändert. Ich hoffe, es ist einfach zu verstehen, was in meinem Code vor sich geht. Danke.

+0

Danke! Dein Code funktioniert gut !! DANKE NOCHMAL!!! – user112752

0
$reviews_nn = $rowprod["reviews"]; 
$reviews = json_decode($reviews_nn,true); 
$numberOfReviews = 0; 
$totalStars = 0; 
foreach($reviews['comments'] as $review) 
{ 
    $numberofReviews++; 
    $totalStars += $review['star']; 
} 
$average = $totalStars/$numberOfReviews; 
echo 'Average rating: '.$average; 

Dies sollte funktionieren.

+0

Vielen Dank für Ihre Antwort! Aber das Risiko ist NAN :( – user112752

Verwandte Themen