2012-12-31 43 views
0

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

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

下来是这样,给我“行”的位置这将返回一个数字,实际上计数的记录数。

现在我需要去改变它给我的所有行了其中的的azazaz和颜色,这样我可以看到所有的行列所有的azazaz /颜色组合

这是我目前不工作

SET @RankNumber:=0; 
select 
    RankNumber,MapID,COlor 
from 
    (select 
     TankID, 
      @RankNumber:[email protected] + 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

挖掘和搞乱之后,我发现解决方案是将外部选择中的变量设置为零,并且由于用户定义的变量是连接级别,因此我使用池化,我们不应该有任何问题。

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

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