#php #rating #drupal-fivestar
#php #Оценка #drupal-fivestar
Вопрос:
У меня уже есть 5-звездочная рейтинговая система (пользователь голосует 1-5 … и отображается средний балл — у меня есть страница, на которой они голосуют, и она вставляет в БД имя пользователя и голос), однако теперь я хочу улучшить ее, интегрировав какой-то вес, который функционирует исключительно для увеличения воздействияваш голос зависит от среднего балла контента. Это делает ваш голос «весящим» больше, чем в противном случае.
В настоящее время у меня есть $level
(число от 1 до 10 у каждого пользователя … где 10 — самое высокое, поэтому имеет наибольший эффект), которое я хотел бы использовать для рассмотрения.
Я просто не уверен, как это сделать.
Ответ №1:
Самый простой способ сделать это — просто вставить один голос в БД для каждого уровня.
for($i = 0; $i < $level; $i ) {
store_vote($user, $item);
}
Комментарии:
1. 1 для самого простого возможного решения. Единственный недостаток, который я вижу здесь, это то, что вы не можете пересчитать позже — я бы предпочел взвешенный подход, поэтому, если результаты получатся странными, вы можете просто изменить веса и пересчитать — но это, безусловно, самый простой способ сделать это, и для некоторых сценариев это будет хорошо работать. Я был бы более склонен использовать это, если бы это было просто «опытные пользователи получают два голоса»; риски, связанные с невозможностью пересмотра весов, заставили бы меня не решаться использовать это для 10-балльной шкалы.
Ответ №2:
Если пользователь имеет уровень 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. таким образом, столбец веса в таблице будет содержать уровень голосования пользователей *?
2. @user962026 Прошу прощения за последний комментарий (что-то неправильно понял): столбец веса будет уровнем пользователя (вы можете назвать его «уровень», если он вам больше подходит). Я назвал это «весом», потому что вы можете изменить это независимо от «уровня», например, в логарифмической шкале.