Алгоритм рейтинга MYSQL - PullRequest
0 голосов
/ 02 мая 2011

У меня есть таблица MYSQL, в которой хранится оценка для каждого события пользователя, 1-10 в таблице событий, называемой event_rating. То, что я пытаюсь найти, - это самый точный рейтинг, основанный на количестве голосов и таком рейтинге:

SELECT
 c.userid,
 c.user_name,
 COUNT(d.event_rating) AS votesCount,
 AVG(d.event_rating) AS votesAvg,
 SUM(d.event_rating) AS tsum,
 COUNT(d.event_rating)*AVG(d.event_rating)/COUNT(d.event_rating) as totalRating
FROM events d JOIN users c ON d.userid = c.userid WHERE (d.userid = '2') GROUP BY d.userid ORDER BY totalRating DESC

Я добавил два фиктивных рейтинга для пользователя, один с рейтингом 10, а другой с 5.

Результаты приведены ниже:

 userid     user_name      votesCount       votesAvg    tsum      totalRating
   2    Rahul Khanna         2            7.5000        15        7.50000000

Это точно, и я правильно рассчитываю?

--- РЕДАКТИРОВАТЬ ---

Публикация еще некоторых результатов

ИСПОЛЬЗОВАНИЕ COUNT(d.event_rating)*AVG(d.event_rating)/COUNT(d.event_rating) as totalRating

userid  user_name   votesCount  votesAvg    tsum    totalRating
2      Rahul Khanna     2       7.5000       15      7.50000000
1      Rita Agnihotri   9       4.8889       44      4.88888889
3      Daniel Springs   4       3.5000       14      3.50000000
4      Roger Myers      6       3.5000       21      3.50000000
5      Chun Tanakat     3       3.0000       9       3.00000000

USING COUNT(d.event_rating)*AVG(d.event_rating) as totalRating

userid  user_name   votesCount  votesAvg    tsum    totalRating
1      Rita Agnihotri   9       4.8889       44      44.0000
4      Roger Myers      6       3.5000       21      21.0000
2      Rahul Khanna     2       7.5000       15      15.0000
3      Daniel Springs   4       3.5000       14      14.0000
5      Chun Tanakat     3       3.0000       9       9.0000

--- БОЛЬШЕ ---

Должен ли я использовать нижеприведенное ниже?

COUNT(d.event_rating)*AVG(d.event_rating)/10 as totalRating

Что мне нужно, так это точный способ подсчета итогового рейтинга, с учетом голоса countCount и того, что рейтинг должен быть между 1-10.

--- ПОДРОБНЕЕ ---

У меня есть одна таблица Пользователи, другие События, пользователь может добавлять новые события и оценивать эти события. Таблица Events содержит столбец eventID, userid, event_rating. Таким образом, каждое событие может содержать рейтинг для события, созданного пользователем. Я хочу рассчитать рейтинг всех событий, чтобы получить максимальный (общий) рейтинг для этого пользователя. Я хочу, чтобы итоговый рейтинг, который я получаю, составлял 1-10 и не превышал более 10, независимо от того, сколько событий создал пользователь. Это возможно? если нет каких-либо решений или идей?

Спасибо за чтение:)

1 Ответ

2 голосов
/ 02 мая 2011

Что это за глупая часть запроса ??

COUNT(d.event_rating)*AVG(d.event_rating)/COUNT(d.event_rating) as totalRating

Это ничто

(a*b)/a, что всегда b

, вам нужно просто получить AVG(d.event_rating)

что ты действительно хочешь ??

...