【问题标题】:How to JOIN a table to a ranked SELECT query in MySQL?如何将表加入 MySQL 中的排序 SELECT 查询?
【发布时间】:2014-06-23 05:19:03
【问题描述】:

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

表#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的用户。抱歉。

【问题讨论】:

  • from rank join other_table on ... cross join (select @currank ...) r
  • 根据想要的结果,为什么需要加入表格?
  • 您可以使用降序或从低到高的顺序,不能同时使用。

标签: mysql sql


【解决方案1】:

试试这个:

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

不确定这是你想要的。

【讨论】:

  • 哇,这其实是我一直想要的!非常感谢你,你是一个救生员!
【解决方案2】:

您的查询几乎可以正常工作,只有两个小问题。

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

【讨论】:

    猜你喜欢
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 2018-06-29
    • 2011-12-11
    • 2012-10-21
    相关资源
    最近更新 更多