結果が1つの数値のみであることを考えるとうまく機能するクエリがありますが、複数の行が返されるようにする必要があり、ユーザー定義変数を使用しているため、クエリはそれを処理できません...これが元の手順です
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
手動で実行すると、最初のクエリでランク番号が9220であることを示すマップID 3と色3が表示されます
6022
おそらく複数のMySQL接続からこれを実行できるようにする必要があるため、一時変数を使用せずに実行するのが理想的です。