2016-03-31 10 views
2

Я хочу вычислить среднее значение для рейтинговой системы, но у меня есть нормальная таблица в InnoDB и один столбец в формате JSON с именем: «обзоры» с этой структурой:вычислить среднее значение для рейтинговой системы

{"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} 
    ] 
} 

сейчас Мне нужно рассчитать среднюю звезду. он находится в sql или php? В SQL Server я не знаю, как в PHP У меня есть проблема с запросом на экстракте только все звезды, например:

$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"; 

Но результат NAN ... Не целое? Это целое число звезд ...
звезда = 4
не звезда = «4»

Я надеюсь, что вы можете мне помочь .... Танки !!!

+0

Что это за '$ review_nn = $ rowprod [" reviews "];'? а также '$ reviews ['comments'] ['star'] as $ rate => $ count', но все равно это не сработает. Думаю –

+1

' $ отзывы [комментарии] [star] 'не массив. .. – DevDonkey

+0

Как это часто бывает, решение заключается в нормализации ваших данных. – symcbean

ответ

2

Ваш код не понятно вообще, но я создать пример для вас, и я думаю, что это поможет решить вашу проблему: -

<?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"; 
?> 

Выход: - https://eval.in/545582

Примечание: - Я взяли ваши данные json, но изменили имя переменной. Я надеюсь, что его легко понять, что происходит в моем коде. Спасибо.

+0

Спасибо! Ваш код работает нормально !! СПАСИБО СНОВА !!! – 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; 

Это должно сработать.

+0

Спасибо за ваш ответ! Но ризумент - NAN :( – user112752

Смежные вопросы