我有一个很好的查询,因为结果只有一个数字,但现在我需要允许返回多行,而查询无法处理,因为它使用了用户定义变量...这里是原始的程序
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连接完成,所以理想情况下不使用临时变量就可以完成,因为可能有其他人进来使用它...任何帮助都会很棒。
答案 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;