我有一个名为“排名”的表格,基本上可以保存按“点数”排序的用户排名位置。 它是:
* Id - 整数 - A.I. (这是位置.1 =第一个。最高点)
* IdUser - 整数
* PointsNow - 整数
* PointsBefore - 整数
* PositionBefore - Integer
我想要实现的是有一些方法可以知道用户是否进入了最高级别的位置,或者他现在是否处于较低位置。
例如,这些是一些条目:
1 | 2236 | 41 | 0 | 0
2 | 551 | 40 | 0 | 0
3 | 1557 | 34 | 0 | 0
所以我虽然可以做到这一点:
*删除所有条目
*将自动增量重置为1
*复制PointsNow to PointsBefore和Id to PositionBefore。
我不确定我是否应该这样做,或者是否有更合理的选择。我很感激一些帮助。
由于
答案 0 :(得分:1)
试试这个:
select @rownum:=@rownum+1 `rank`, u.idUser
from User u, (SELECT @rownum:=0) r
order by PointsNow desc;
如果您只想根据排名订购用户:
SELECT * FROM User
ORDER BY PointsNow DESC;
示例数据:
CREATE TABLE User(
IdUser Integer primary key,
PointsNow Integer,
PointsBefore Integer,
PositionBefore Integer);
INSERT INTO User(IdUser,PointsNow,PointsBefore,PositionBefore)
VALUES (2236,41,0,0),(551,40,0,0),(1557,34,0,0);
需要注意的是,我省略了id列。使用触发器自动执行查询。有关排名计算的更多信息,请参阅。 MySQL update statement to store ranking positions。