sql >> データベース >  >> RDS >> Mysql

LIMIT付きのINに代わるものはありますか?

    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個以上が残ります。



    1. PDOSHOWTABLES配列

    2. SQLServerのカーソルタイプ-静的カーソルのみを転送| SQLServerチュートリアル/TSQLチュートリアル

    3. 毎日何パーセントのユーザーが参加したか(SQLクエリ)

    4. SQL ServerのDECODE()関数