我的数据库中有两个不同的表,名称为:rank,settings。
以下是每个表的外观如下:
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中选择所有并按降序顺序对结果进行排名。 例如: 期望的结果如下:
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的用户。道歉。
答案 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;
不确定这是你想要的。
答案 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