Скрипт среднего рейтинга

Я уже спрашивал об этом однажды, но я не получил очень четкого ответа.

Мне нужно знать, как сделать рейтинговый скрипт для сайта. У меня есть форма, которая отправляет рейтинг из десяти в mysql. Как бы вы получили средний рейтинг, который будет отображаться в столбце mysql с помощью php?

Один человек предложил иметь два стола; один для всех рейтингов и один для среднего рейтинга каждой страницы. Есть ли более простой метод, чем этот?


person blah    schedule 24.04.2010    source источник
comment
Знаете ли вы, что вы можете редактировать свои вопросы и даже добавлять комментарии к ответам?   -  person goat    schedule 24.04.2010


Ответы (3)


Вам нужно будет сохранять рейтинг каждый раз, когда страница оценивается. потому что если вы просто сохраните средний рейтинг в одном столбце, например

ratings (page_id, average_rating)

Определить не просто:

  1. Сколько пользователей оценили
  2. Распределение оценок (например, сколько проголосовало 10)

И вы не можете разрешить пользователям изменять свой рейтинг, потому что все сведено в одну строку. Без второй таблицы можно обойтись, если использовать усредненную функцию в MYSQL

$result = mysql_query("SELECT AVG(rating) FROM ratings GROUP BY page_id WHERE page_id = '$pageid'");
$rating_for_page = mysql_fetch_row($result);
$rating = $rating_for_page[0];

Обратите внимание, что я предполагаю, что каждый рейтинг хранится в виде отдельной строки.

person Extrakun    schedule 24.04.2010

Если вы собираете оценки для одной функции, скажем, FeatureX, и размещаете в столбце, скажем, FCOLX, тогда вы можете:

  1. Используйте встроенную функцию Mysql AVG()
  2. Получить все значения и вычислить среднее значение в php-скрипте.

Расчет среднего обычно происходит следующим образом:

$myRatings = $dbHandler->fetch(); //generic fetch
$totalRatings = count($myRatings);
$sum = 0;
foreach($myRatings as $index=>$rating){
   $sum+=$rating['FCOLX']; //where FCOLX is the column where you have the user rating [1-10];
}

$average = 0;

if($totalRatings>0){ 
  $average = $sum/$totalRatings;
}

Полученное среднее значение будет соответствовать используемой вами шкале от 1 до 10.

person Andreas    schedule 24.04.2010

Простое среднее само по себе не очень хорошо для рейтинга. Например, если сто человек проголосовали за что-то в среднем 8,5, то всего один человек, проголосовавший 10 за что-то другое, дал бы этому лучший рейтинг.

Я задал похожий вопрос время назад, что может вас заинтересовать.

person zneak    schedule 24.04.2010