【问题标题】:MySQL ranking conditions from two tables来自两个表的 MySQL 排名条件
【发布时间】:2015-07-16 11:11:59
【问题描述】:

我有两个表:第一个是用户数据(名称:users),第二个是用户统计信息(名称:users_stats)。下面是我的排名 MySQL 查询(使用一个表:users_stats):

SELECT  d.*, c.ranks FROM (
    SELECT sold, @rank:=@rank+1 ranks FROM (
        SELECT DISTINCT a.`sold` FROM users_stats a ORDER BY sold DESC
    ) t, 
    (SELECT @rank:= 0) 
r) c 
INNER JOIN users_stats d ON c.sold = d.sold 
WHERE login = 'XXXXXX'

RESULTS:
LOGIN_1 - 50 SOLD - RANK 1 (ACTIVE) 
LOGIN_2 - 40 SOLD - RANK 2 (ACTIVE) 
LOGIN_3 - 40 SOLD - RANK 2 (ACTIVE)
LOGIN_4 - 30 SOLD - RANK 3 (BLOCKED)
LOGIN_5 - 20 SOLD - RANK 4 (ACTIVE)

我想添加到此查询帐户活动条件,因为我不想在不活动或被阻止的人中排名。

我试过把条件查询:

SELECT  d.*, c.ranks FROM (
    SELECT sold, @rank:=@rank+1 ranks FROM (
        SELECT DISTINCT a.`sold` FROM users_stats a ORDER BY sold DESC
    ) t, 
    (SELECT @rank:= 0) 
r) c 
INNER JOIN users_stats d ON c.sold = d.sold 
WHERE login = 'XXXXXX'  
AND `login` IN (SELECT b.`login` FROM `users` b WHERE b.`active` = 'YES')

...但是我的排名位置被跳过了,例如:

RESULTS: 
LOGIN_1 - 50 SOLD - RANK 1 (ACTIVE) 
LOGIN_2 - 40 SOLD - RANK 2 (ACTIVE) 
LOGIN_3 - 40 SOLD - RANK 2 (ACTIVE) 
LOGIN_4 - 20 SOLD - RANK 4 (ACTIVE)

我会很高兴有任何线索! :) 谢谢!

【问题讨论】:

    标签: mysql conditional-statements ranking


    【解决方案1】:

    我认为您的查询工作量太大。您不需要在子查询中执行distinct,您可以直接枚举sold 值。这需要两个变量和更多逻辑。

    无论如何,当您选择 sold 值时,您的问题的答案是执行 join。这是一种方法:

      SELECT us.*,
             (@rank := if(@s = sold, @rank + 1,
                          if(@s := sold, 1, 1)
                         )
             ) as rank
      FROM users_stats us JOIN
           users u
           ON us.login = u.login CROSS JOIN 
           (SELECT @rank:= 0, @s := 0) params
     WHERE u.login = 'XXXXXX'
     ORDER BY sold,  DESC
    

    【讨论】:

    • 我收到“警告:mysql_fetch_object():提供的参数不是有效的 MySQL 结果资源...”当我提出您的查询时。您可以添加用户的活动条件吗?
    • @RafałKonarski 。 . . MySQL 中的子查询需要别名,即使用于定义常量。
    • Opss...我在查询中没有看到“params”... :) 谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 2017-07-05
    • 2011-01-12
    • 2015-06-25
    相关资源
    最近更新 更多