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 से कम नहीं बचेगा।