DELETE FROM Highscore ORDER BY value DESC LIMIT 10,5
5
cuối cùng đó có thể là bất kỳ số nào. Nếu bạn chạy điều này mỗi khi một điểm được thêm vào, bạn có thể có nó dưới dạng 1
. Để có nhiều sai số hơn, hãy sử dụng 10
.
CHỈNH SỬA:Xin lỗi, rõ ràng là bạn không thể sử dụng phần bù ở đây. Trong trường hợp đó:
DELETE FROM Highscore WHERE value < (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
Nếu nó không cho phép bạn làm điều đó (chọn từ cùng một bảng làm cập nhật / xóa), hãy thử:
SET @tmp = (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
DELETE FROM Highscore WHERE value < @tmp
CHỈNH SỬA một lần nữa:Như đã chỉ ra trong nhận xét, gây ra vấn đề nếu giá trị 11 bằng 10. Hãy thử:
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
Sắp xếp thứ tự theo điểm số trong biến đầu tiên đảm bảo rằng khi có một số điểm có cùng điểm số thì sẽ không có ít hơn 10 điểm ở đó.