Интеграция веса в 5-звездочную систему голосования?
У меня уже есть система оценки 5 звезд (голоса пользователей 1-5... и отображается средний балл - у меня есть страница, на которой они голосуют, и она вставляет в БД имя пользователя и голосует), однако теперь я хочу улучшить ее, интегрировав какой-то вес, который функционирует исключительно для увеличения влияния вашего голоса на средний балл контента. Это заставляет ваш голос "весить" больше, чем в противном случае.
В настоящее время у меня есть $level
(это число от 1 до 10 для каждого пользователя имеет... где 10 - самый высокий, следовательно, имеющий наибольший эффект), который я хотел бы использовать для рассмотрения.
Я просто не уверен, как это сделать.
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 = ?
Самый простой способ сделать это - просто вставить один голос в базу данных для каждого уровня.
for($i = 0; $i < $level; $i++) {
store_vote($user, $item);
}