gpt4 book ai didi

MySQL变量没有正确递增

转载 作者:搜寻专家 更新时间:2023-10-30 22:18:20 24 4
gpt4 key购买 nike

运行以下查询

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

关于MySQL变量没有正确递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7963587/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com