2012-01-16 18 views
8

DELETE मैं एक स्क्रिप्ट है कि मेरे php साइट पर हर घंटे चलाता है। उस स्क्रिप्ट में मुझे किसी तालिका से प्रत्येक रिकॉर्ड को हटाने के लिए किसी प्रकार की MySQL क्वेरी चाहिए, लेकिन नवीनतम 50.MySQL सभी लेकिन नवीनतम एक्स रिकॉर्ड

मैं ऐसा कुछ कैसे करूं?

// pseudo code: like this? 
DELETE from chat WHERE id = max (ID - 50) 
+0

क्या आप अपनी तालिका में टाइमस्टैम्प फ़ील्ड जोड़ सकते हैं? –

+0

यदि आपका आईडी कॉलम 1 के ऑटोइनक्रिएटमेंट के साथ एक पहचान कॉलम है, तो आप कुछ ऐसा कर सकते हैं: ' से हटाएं, जहां आईडी नहीं है (आईडी डीईएससी द्वारा चैट ऑर्डर से शीर्ष 50 आईडी चुनें) ' – pistipanko

+0

मुझे एक मिला है datetime क्षेत्र – user1022585

उत्तर

14

आप प्रयोग नहीं कर में की कोशिश कर सकते:

DELETE FROM chat WHERE id NOT IN ( 
    SELECT id 
    FROM ( 
    SELECT id 
    FROM chat 
    ORDER BY id DESC 
    LIMIT 50 
) x 
); 

यह एसक्यूएल-सर्वर के लिए है:

DELETE FROM chat WHERE id NOT IN 
    (SELECT TOP 50 id FROM chat ORDER BY id DESC) 

उच्च मूल्यों मान लिया जाये कि

MySQL के लिए संपादित करेंकाहमेशा नए होते हैं।

+0

बेहतर क्रम अवरोही क्रम में उन आईडी। –

+0

कोशिश की यह काम नहीं करता है:/मेरे पास 'date' फ़ील्ड भी है यदि यह – user1022585

+0

हूप्स में मदद करता है। आपका प्रश्न एसक्यूएल के साथ टैग किया गया है - अब MySQL समाधान का उपयोग करने का प्रयास करें। – Brissles

0

आप कुछ इस तरह की कोशिश कर सकते:

DELETE from chat WHERE id < (SELECT max(ID)-50 FROM chat) 

यह काम करेगा अगर ID के लिए अपने मूल्यों 1. के चरणों में बढ़ती है, या आप की तरह कुछ का उपयोग कर सकते हैं:

DELETE FROM chat WHERE id NOT IN 
    (SELECT id FROM (SELECT ID FROM chat ORDER BY datetime_col DESC LIMIT 50) t) -- mysql 
+0

इन काम के लिए या तो नहीं मिल सकता है: ओ – user1022585

+0

आप क्या डाटाबेस सिस्टम प्रयोग करते हैं? – Mithrandir

2

नहीं कर रहा है अक्षम। आप @Mithrandir द्वारा पिछले उत्तर में पहले विकल्प को थोड़ा सा संशोधित कर सकते हैं ताकि इसे इस तरह दिख सके:

DELETE from chat WHERE id < 
    (SELECT id FROM 
    (SELECT id FROM chat ORDER BY id DESC LIMIT 50) t ORDER BY id ASC LIMIT 1)); 
संबंधित मुद्दे