Как ранжировать пользователей с данными коэффициента в MySQL? - PullRequest
0 голосов
/ 02 июля 2019

В игре у меня есть список пользователей, данные которых записаны в таблицу под названием «ранги».Эти пользователи выигрывают очки день за днем, и за каждый день у них появляется новая запись в таблице рейтинга.Но некоторые дни важнее других, и очки могут заплатить больше.По техническим причинам мне пришлось хранить начальные точки в базе данных.Поэтому я добавил новое поле «коэффициент», и мне нужно вычислить общее количество баллов на лету.

Например, эти пользователи:

user,   points,     day,    coefficient
user 1, 35 points,  day 1,  coefficient 1
user 1, 20 points,  day 2,  coefficient 1
user 1, 15 points,  day 3,  coefficient 2

user 2, 40 points,  day 1,  coefficient 1
user 2, 35 points,  day 2,  coefficient 1
user 2,  5 points,  day 3,  coefficient 2

Я хотел бы рассчитать баллы за все дни, за каждый день или за несколько дней в одно и то же время.Мой запрос кажется неправильным в течение нескольких дней:

$sql = 'SELECT (SUM(r.points) * r.coefficient) AS total 
        FROM ranks AS r 
        GROUP BY user 
        ORDER BY total DESC ';
$sql = 'SELECT (SUM(r.points) * r.coefficient) AS total 
        FROM ranks AS r 
        WHERE day IN (2,3) 
        ORDER BY total DESC ';

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

Спасибо всем!

Александр

1 Ответ

1 голос
/ 02 июля 2019

Я думаю, что проблема в том, что вы берете сумму очков и умножаете ее на коэффициент (что на практике означает, что вы сначала суммируете все точки, а затем умножаете эту сумму на произвольный коэффициент). Вы хотите взять сумму каждой точки, умноженную на каждый коэффициент, прежде чем брать сумму этих чисел.

Кроме того, вы хотели бы включить пользователя в выборку, так как это то, на что вы группируете (я думаю - это может работать без, но это то, к чему я привык).

Попробуйте это:

$sql = 'SELECT user, SUM(r.points * r.coefficient) AS total 
    FROM ranks r
    WHERE day IN (2,3) 
    GROUP BY user 
    ORDER BY total DESC ';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...