0

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

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 和 color 的位置,这样我就可以看到所有 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 连接来完成此操作,因此最好在不使用临时变量的情况下完成,因为它可能会有另一个人进来并使用它......任何帮助都会很棒。

4

1 回答 1

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;
于 2012-12-31T01:37:03.190 回答