0

ゲームのスコアを含むテーブルがあります

CREATE TABLE Scores
(
  PlayerName varchar(50),
  LevelId integer,
  Score integer,
  Difficulty integer
);

スコアエントリの数を常に10要素に制限したいと思います(特定のレベルと難易度について)

そのため、スコア テーブルに 10 のエントリ (特定のレベルと難易度) があり、プレーヤーが新しいハイスコアを取得した場合、最後の要素 (最低スコア) を削除して、新しいハイスコアを挿入したいと考えています。これどうやってするの?

4

3 に答える 3

2

どうですか...

DELETE FROM Scores S1
    WHERE Score < (SELECT MIN(Score)
                       FROM (SELECT Score
                                 FROM Scores S2
                                 WHERE S1.Level      = S2.Level      AND
                                       S1.Difficulty = S2.Difficulty
                                 ORDER BY Score DESC
                                 LIMIT 10) AS Derived);

ただし、これはすべてのデータベースで機能するわけではありません。複数のスコアが 10 番目の位置にある場合でも、テーブルを 10 行に限定しません。

後で - Andomar が指摘した間違いを修正するために編集します。

于 2010-07-08T08:59:07.907 に答える
0
DELETE FROM Scores
WHERE LevelID = ? AND Difficulty = ?
ORDER BY Score ASC
LIMIT 1

最も低いスコアを削除する必要があります。しかし、これがあなたが望むものであったとしても、それはあなたが必要とするものではないかもしれません。:)

于 2010-07-08T08:52:48.143 に答える
0
delete from Scores 
where playerName+'|'+cast(levelID as varchar)+'|'+cast(Difficulty as varchar)+'|'+cast(score as varchar) 
in( 
select playerName+'|'+cast(levelID as varchar)+'|'+cast(Difficulty as varchar)+'|'+cast(score as varchar)  from 
(Select rank() over (partition by cast(levelID as varchar)+'|'+cast(Difficulty as varchar) order by score desc) as bRank,* 
from Scores as b) as Ranks
where Ranks.bRank >= 10)

playerName+'|'+cast(levelID as varchar)+'|'+cast(Difficulty as varchar)+'|'+cast(score as varchar) を主キーに置き換えることができます

これにより、10 位以降のプレイヤーが得られます。

select Ranks.* from 
(Select rank() over (partition by cast(levelID as varchar)+'|'+cast(Difficulty as varchar) 
order by score desc) as bRank,* 
from Scores as b) as Ranks
where Ranks.bRank >= 10 

結果:

bRank                playerName                                         LevelID     Score       Difficulty
-------------------- -------------------------------------------------- ----------- ----------- -----------
10                   Player 3                                           1           3           10
11                   Player 2                                           1           2           10
12                   Player 1                                           1           1           10
于 2010-07-08T14:48:41.273 に答える