我的数据库中有 2 个不同的表,名称分别为:等级、设置。
以下是每个表的外观,其中包含一些记录:
表#rank:
id points userid
-- ----- ------
1 500 1
2 300 2
3 900 3
4 1500 4
5 100 5
6 700 6
7 230 7
8 350 8
9 850 9
10 150 10
表#设置:
userid active
------ ------
1 0
2 1
3 1
4 1
5 1
6 0
7 1
8 1
9 0
10 1
我想从 rank
表中按 user_id
获取特定用户的排名(按积分排序)。另外,如果用户在 settings
表中设置了 active = 1
,我只想将用户包含在排名结果中。
我有一个简单的排名查询,但它并不是真正有效,因为它确实包括每个人,即使用户不活跃:
SELECT * FROM
(SELECT @sort:=@sort+1 AS sort, points, userid
FROM rank,
(SELECT @sort := 0) s
ORDER BY points DESC) t
WHERE userid= 8
有什么想法吗,我怎样才能在这里实现我的目标?
最佳答案
很少有子查询。首先以正确的顺序获取所有活跃用户。它用作另一个查询的来源来添加排名。然后将其用作您实际感兴趣的用户 ID 的积分和排名的来源
SELECT sort, points
FROM
(
SELECT @sort:=@sort + 1 AS sort, points, userid
FROM
(
SELECT rank.points, rank.userid
FROM rank
INNER JOIN settings
ON rank.userid = settings.userid
WHERE settings.active = 1
ORDER BY points DESC
) sub0
CROSS JOIN (SELECT @sort:=0) sub2
) sub1
WHERE sub1.userid = 8
关于mysql - 如何从 2 个表中获取 MySQL 的排名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24409513/