[英]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.