Интеграция веса в систему голосования 5 звезд? - PullRequest
2 голосов
/ 03 ноября 2011

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

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

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

Ответы [ 2 ]

2 голосов
/ 03 ноября 2011

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

for($i = 0; $i < $level; $i++) {
    store_vote($user, $item);
}
1 голос
/ 03 ноября 2011

Если пользователь имеет уровень 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 = ?
...