Как посчитать рейтинг пользователя на основании голосования за его материалы fivestar

Главные вкладки

Аватар пользователя -pax- -pax- 29 ноября 2009 в 16:42

Стоит модуль Fivestar, пользователи голосуют за материалы.
Как можно считать рейтинг пользователя на основании оценок которые выставляются материалам этого пользователя?
Есть ли какие-то стандартные решения для этого?
Например получить среднее значение рейтинга для всех материалов одного пользователя.

Комментарии

Аватар пользователя Kail@drupal.org Kail@drupal.org 4 декабря 2009 в 0:19

Есть таблица votingapi_vote - каждый голос, и votingapi_cache - кеш, в ней, как минимум, есть среднее значение и количество голосов за ноду. Используй.

Я вот использовал votingapi_cache (не знаю насколько это правильно, у кеша могут быть разные настройки обновления). SQL-код в phpMyAdmin работал, за php не ручаюсь.

<?php
$query 
"
SELECT AVG(votingapi_cache.value) as rating
FROM {node}
INNER JOIN votingapi_cache ON node.nid = votingapi_cache.content_id
WHERE node.uid = %d AND node.type = '%s' votingapi_cache.content_type = 'node' 
  AND votingapi_cache.function = 'average'"
;
$result db_result(db_query($query$user->uid$your_node_type_name));
print_r(db_fetch_array($result));
?>

А может есть готовая функция Voting API, которая все мелочи уже учитывает, изучай.

Аватар пользователя Kail@drupal.org Kail@drupal.org 9 декабря 2009 в 22:14

Упс, я несколько ошибся с кодом. В SQL-запросе один AND удалил случайно. PHP тоже не точный... Вот правильный код, проверил - вроде работает.

<?php
global $user;
$query "
SELECT AVG({votingapi_cache}.value) as rating
FROM {node}
INNER JOIN {votingapi_cache} ON {node}.nid = {votingapi_cache}.content_id
WHERE {node}.uid = %d AND {node}.type = '%s'
 AND {votingapi_cache}.content_type = 'node'  AND {votingapi_cache}.function = 'average'"
;
$result db_result(db_query($query$user->uid$your_profile_name));
print_r($result);
?>

$your_profile_name - название типа материала, для которого считают среднее. Если надо по всем материалам, то нужно немного исправить.
И да, в phpMyAdmin напрямую этот SQL-код работать не будет. Чтобы работало - над убрать фигурные скобки (они нужны, когда несколько сайтов на одной БД висят) и заменить %d и %s на выбранный uid и название типа материала.

Аватар пользователя -pax- -pax- 11 декабря 2009 в 14:57

"<a href="mailto:Kail@drupal.org">Kail@drupal.org</a>" wrote:

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

Аватар пользователя -pax- -pax- 23 февраля 2010 в 21:15

"ivcons" wrote:
Если сделали подскажите пожалуйста.

Не сделал только рейтинг в профиле показываю, вот бы еще кто-нибудь подсказал как к views его прикрутить Smile

Аватар пользователя -pax- -pax- 24 февраля 2010 в 16:49

"Goodboy" wrote:
Как прикрутить Fivestar к Views

А вы тему читали?
К views надо прикрутить рейтинг который считается запросом который написал [user=Kail@drupal.org]

Аватар пользователя goodboy goodboy 24 февраля 2010 в 19:16

Да, внимательность не самое мое сильное качество Smile Извините, что не так понял.
Еще есть ссылка - http://drupal.org/handbook/modules/fivestar . Вот там, насколько я понял, рекомендуется не использовать запрос в чистом виде, а воспользоваться функциями из votingapi .

Как в views прикрутить запрос - не знаю.