Интеграция веса в 5-звездочную систему голосования?


У меня уже есть система оценки 5 звезд (голоса пользователей 1-5... и отображается средний балл - у меня есть страница, на которой они голосуют, и она вставляет в БД имя пользователя и голосует), однако теперь я хочу улучшить ее, интегрировав какой-то вес, который функционирует исключительно для увеличения влияния вашего голоса на средний балл контента. Это заставляет ваш голос "весить" больше, чем в противном случае.

В настоящее время у меня есть $level (это число от 1 до 10 для каждого пользователя имеет... где 10 - самый высокий, следовательно, имеющий наибольший эффект), который я хотел бы использовать для рассмотрения.

Я просто не уверен, как это сделать.

Author: kiamlaluno, 2011-11-03

2 answers

Если пользователь имеет уровень X, вы можете сделать так, чтобы его/ее голос весил X голосов 1-го уровня. Вы можете добавить в таблицу еще одно поле "вес" и показать среднее значение vote*weight:

SELECT AVG(weight * vote)
FROM rating
WHERE item = ? 

(где? вам нужен идентификатор)

Если вы считаете, что это слишком сложно для ваших нужд (и вы уже сохранили пользователя, который проголосовал), вы можете использовать этот запрос:

SELECT AVG(r.weight * u.level)
FROM rating
JOIN user ON r.user_id = u.id
WHERE r.item = ?
 1
Author: Gabi Purcaru, 2011-11-03 04:22:31

Самый простой способ сделать это - просто вставить один голос в базу данных для каждого уровня.

for($i = 0; $i < $level; $i++) {
    store_vote($user, $item);
}
 2
Author: ceejayoz, 2011-11-03 04:12:32