繁体   English   中英

MySQL变量没有正确递增

[英]MySQL variable not incrementing correctly

运行以下查询

SET @rownum := 0;    
SELECT customer_id, @rownum := @rownum +1 AS rank, score
FROM game_table_customers gtc
INNER JOIN customers c ON c.customers_id = gtc.customer_id
INNER JOIN game_table gt ON gtc.table_id = gt.table_id
WHERE c.my_team =11095
AND gt.event_id =21110
ORDER BY score DESC
LIMIT 0 , 30

正确的结果应如下所示

CustID  Rank    Score
2        1     130000
39       2     99426
84       3     99178
259      4     98963
339      5     97796

但是,我得到的是以下内容

CustID  Rank    Score
2        2      130000
39      11      99426
84      20      99178
259     54      98963
339     69  97796

当我排除event_id子句时,我得到正确的结果。 但是当包含event_id时,它会扭曲它。 我只尝试了event_id(删除了my_team子句)和相同的错误结果。

任何有关结果可能会被取消的想法/建议都将非常感激

我想这与在每种情况下选择的执行计划以及应用行号的混合方法有关-在某些计划中。 计算行号,然后评估WHERE条件,因此您会看到非连续的行号。

尝试以下操作(首先获取所需的30个结果,然后应用行号):

SET @rownum := 0; 
SELECT customer_id, @rownum := @rownum +1 AS rank, score
FROM
  ( SELECT customer_id, score
    FROM game_table_customers gtc
      INNER JOIN customers c ON c.customers_id = gtc.customer_id
      INNER JOIN game_table gt ON gtc.table_id = gt.table_id
    WHERE c.my_team =11095
      AND gt.event_id =21110
    ORDER BY score DESC
    LIMIT 0 , 30
  ) tmp
ORDER BY score DESC

我现在无法测试它,但你也可以试试这个:

SELECT customer_id, @rownum := @rownum +1 AS rank, score
FROM game_table_customers gtc
  INNER JOIN customers c ON c.customers_id = gtc.customer_id
  INNER JOIN game_table gt ON gtc.table_id = gt.table_id
  CROSS JOIN (SELECT @rownum := 0 AS rn) dummy  
WHERE c.my_team =11095
  AND gt.event_id =21110
ORDER BY score DESC
LIMIT 0 , 30

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM