2012-12-31 3 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 

이것은 하나의 숫자를 반환합니다.이 숫자는 본질적으로 레코드 수를 계산하여 "행"위치를 제공합니다. 나는 모든의 mapId/컬러 콤보

모든 계급을 볼 수 있도록

는 지금이 내가 현재 사용하지 않는 것을 가지고 무엇을,의 mapId 및 색상의 어디에서 나에게 모든 행을 줄을 변경해야

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 

내가 수동으로 말할 수 실행할 경우 순위 번호가 내가 할 첫 번째 쿼리와 9220 말합니다지도 상에 있습니다 ID 3 색 3 나는이 와서 좋은 것 그 ... 어떤 도움을 사용할 수 있도록 이상적으로는 가능한 한 다른 사람부터 임시 변수를 사용하지 않고 수행 여러 MySQL의 연결에서 가능하게 할 수 있어야이

6022 

.

답변

0

더 자세히 살펴본 후 해결책을 찾았습니다. 외부 변수에서 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; 
관련 문제