替换mysql用户定义的变量

时间:2012-12-31 01:21:24

标签: mysql

我有一个很好的查询,因为结果只有一个数字,但现在我需要允许返回多行,而查询无法处理,因为它使用了用户定义变量...这里是原始的程序

CREATE DEFINER=`root`@`%` PROCEDURE `MapRank`(pTankID bigint,pMapID int, pColor int(2))
BEGIN
SET @RankNumber:=0; 
select RankNumber 
from 
(select 
    TankID,
    @RankNumber:=@RankNumber+1 as RankNumber,
    MapID,
    Color 
 from MAPDATA WHERE MapID = pMapID order by Rank DESC, TotalPP DESC) Query1 where TankID = pTankID AND COLOR = pColor ;
END

这会返回一个数字,主要是计算它下面的记录数,给我一个“行”位置。

现在我需要更改它以给我所有的行没有mapid和颜色的位置,这样我就可以看到所有mapid / color组合的所有等级

这就是我目前无效的

SET @RankNumber:=0;
select 
    RankNumber,MapID,COlor
from
    (select 
        TankID,
            @RankNumber:=@RankNumber + 1 as RankNumber,
            MapID,
            Color
    from
        MAPDATA

    order by TotalPP DESC) Query1
where
    TankID = 18209 ORDER BY RankNumber

让步查询结果如下:

1062    3   1
3544    3   0
6717    17  1
6752    17  3
7453    3   2
7860    17  0
7984    17  2
9220    3   3

如果我手动运行,可以说,地图ID 3和颜色3,其中排名是9220,第一个查询我得到了这个

6022

我需要这可以从多个MySQL连接完成,所以理想情况下不使用临时变量就可以完成,因为可能有其他人进来使用它...任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

在挖掘和弄乱更多之后,我发现解决方案是从外部选择中将变量设置回零。由于用户定义的变量是连接级别,我利用池,我们应该永远不会有问题。

SET @RankNumber:=0;
select 
    RankNumber,MapID,COlor, @RankNumber:=0
from
    (select 
        TankID,
            @RankNumber:=@RankNumber + 1 as RankNumber,
            MapID,
            Color
    from
        MAPDATA

    order by MapID, Rank DESC, TotalPP DESC ) Query1
where
    TankID = pTankID ORDER BY RankNumber;