在游戏中,我有一个用户列表,这些用户的数据记录在称为“等级”的表中。这些用户日复一日地赢得积分,并且每天他们在表排名中都有新记录。但是,有些日子比其他日子更重要,积分可以赚更多的钱。由于技术原因,我不得不将初始点存储在数据库中。因此,我添加了一个新的字段“系数”,并且必须即时计算总点数。
例如,那些用户:
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 ';
我很难格式化第二个查询以使其正常工作。
谢谢!
亚历山大
答案 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 ';