mysql - 如何从 2 个表中获取 MySQL 的排名?

标签 mysql sql sorting

我的数据库中有 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/

相关文章:

sql - 使用 psql 复制 csv 时包括 NULL 值

python - 为相同的字典值创建可交换元组键的最佳方法是什么?

mysql - 如何从工作台中摆脱烦人的 "mydb"模式

mysql - SQL:连接选择多个缺少行的表

php - 如何获取要显示的四行的首尾行号

c++ - 列表类型的binary_search函数的时间复杂度是多少

java - 堆排序工作 99%

mysql 通过命名变量获取查询

php - 将自定义查询转换为 SQL

sql - 合并另一个表中的数据时违反主键