DELETE FROM Highscore ORDER BY value DESC LIMIT 10,5
その最後の5
任意の数にすることができます。スコアが追加されるたびにこれを実行すると、1
として実行できます。 。エラーのマージンを増やすには、10
を使用します 。
編集:申し訳ありませんが、ここではオフセットを使用できないようです。その場合:
DELETE FROM Highscore WHERE value < (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
それができない場合(更新/削除と同じテーブルから選択)、次のことを試してください。
SET @tmp = (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
DELETE FROM Highscore WHERE value < @tmp
再度編集:コメントで指摘されているように、11番目の値が10番目に等しい場合に問題が発生します。試してみてください:
SET @id = (SELECT scoreId FROM Highscore ORDER BY value DESC, scoreId DESC LIMIT 10,1), @val = (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
DELETE FROM Highscore WHERE value <= @val AND scoreId < @id
最初の変数のscoreIdで並べ替えると、同じスコアのスコアが複数ある場合でも、10個以上が残ります。