如何在mysql中用系数数据对用户进行排名?

时间:2019-07-02 11:04:20

标签: mysql database

在游戏中,我有一个用户列表,这些用户的数据记录在称为“等级”的表中。这些用户日复一日地赢得积分,并且每天他们在表排名中都有新记录。但是,有些日子比其他日子更重要,积分可以赚更多的钱。由于技术原因,我不得不将初始点存储在数据库中。因此,我添加了一个新的字段“系数”,并且必须即时计算总点数。

例如,那些用户:

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 个答案:

答案 0 :(得分:1)

我认为问题在于,您正在获取点的总和并将其乘以系数(在实践中,这意味着您首先要对所有点求和,然后将该总和乘以任意系数)。您要先取每个点的总和乘以每个系数,然后再取这些数字的总和。

此外,您还希望将用户包括在选择中,因为这是您要进行分组的对象(我认为-可能没有它也可以工作,但这就是我惯用的方法)。

尝试一下:

$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 ';