如何将表连接到MySQL中排序的SELECT查询?

时间:2014-06-22 20:00:25

标签: mysql sql

我的数据库中有两个不同的表,名称为:rank,settings。

以下是每个表的外观如下:

表#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

表#settings:

userid    active 
------    ------
     1         0
     2         1
     3         1
     4         1
     5         1
     6         0
     7         1
     8         1
     9         0
    10         1

我基本上想要实现的是从#rank中选择所有并按降序顺序对结果进行排名。 例如: 期望的结果如下:

rank points userid
---- ----- ------
   1   100      5   
   2   150     10   
   3   230      7
   4   300      2
   5   350      8
   6   500      1
   7   700      6
   8   850      9
   9   900      3
  10   1500     4

到目前为止,我有这个查询对结果进行排名,但是我无法加入另一个表,因为它给了我一个没有创建列的错误。

SELECT    @curRank := @curRank + 1 AS rank, a.points, a.userid
FROM      rank p, (SELECT @curRank := 0) r
ORDER BY  points DESC;

有关如何达到预期效果的任何建议吗?

编辑:

你们是完全正确的。我实际上忘了提一下,我只想选择有效数字= 1的用户。道歉。

2 个答案:

答案 0 :(得分:2)

试试这个:

SELECT  @curRank := @curRank + 1 AS rank, points, userid
FROM 
(SELECT rr.points, rr.userid 
FROM rank rr INNER JOIN settings sr ON sr.userid=rr.userid
AND sr.active=1
ORDER BY rr.points DESC) AS M, (SELECT @curRank := 0) r;

SQLFIDDLE DEMO

不确定这是你想要的。

答案 1 :(得分:1)

你的查询几乎有效,只有两个小问题。

MySQL找不到该列,因为您有from rank p,但选择列a.points, a.userid。更改为from rank a会修复此问题。第二个问题是排序顺序,将desc更改为asc并获得所需的订单

SELECT    @curRank := @curRank + 1 AS rank, a.points, a.userid
FROM      rank a, (SELECT @curRank := 0) r
ORDER BY  points asc

SQLFiddle