简单表userpoints
userid | points
1 | 456
2 | 3
3 | 1778
... | ...我在MySQL 5中使用了多年的这个函数来接收用户名:
SELECT userid, userrank FROM
(SELECT @row_number:=@row_number+1 AS userrank, userid
FROM `userpoints`, (SELECT @row_number := 0) r
ORDER BY points DESC) t
WHERE userid = 123并返回用户it 123的用户名,例如3456。
使用MySQL 8,我只获得1作为userrank的值,而我尝试的每个用户I都是这样。
问题是什么,如何解决?
我单独尝试了内部SELECT,这给出了所有具有正确用户名的用户列表。
发布于 2021-04-06 21:10:01
在MySQL 8中,不建议将用户变量设置为表达式中的副作用.您应该使用窗口函数代替。
SELECT t.userid, t.userrank
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY points DESC) AS userrank, userid
FROM `userpoints`
) t
WHERE t.userid = 123;https://stackoverflow.com/questions/66976352
复制相似问题