2013-03-30 11 views
5

का अद्यतन फ़ील्ड अपडेट करें, जहां मैं नवीनतम रिकॉर्ड अपडेट करने की कोशिश कर रहा हूं, जहां नाम John (John में एकाधिक रिकॉर्ड हैं लेकिन अलग-अलग आईडी हैं) लेकिन मुझे बाध्य होना प्रतीत होता है। मेरी पूछताछ में क्या गलत है?MySQL: सबसे नवीनतम रिकॉर्ड

UPDATE messages_tbl SET is_unread=1 
WHERE ReceiveTime = (SELECT MAX(ReceiveTime) FROM messages_tbl WHERE name='John') 

क्या ऐसा कुछ करने का बेहतर तरीका है?

उत्तर

4

आप दोनों में शामिल हो सकते हैं और स्थिति के आधार पर अपडेट कर सकते हैं।

UPDATE messages a 
     INNER JOIN 
     (
      SELECT name , MAX(ReceiveTime) max_time 
      FROM messages 
      GROUP BY name 
     ) b ON a.name = b.name AND 
       a.ReceiveTime = b.max_time 
SET  a.is_unread = 1 
-- WHERE a.name = 'John' 

WHERE स्थिति के बिना। यह नवीनतम प्रविष्टि के लिए कॉलम is_unread को अपडेट करेगा।

+0

क्षमा करें, मुझे एक त्रुटि कोड: 1064' मिल रहा है। – enchance

+0

पूर्ण त्रुटि संदेश क्या है? –

+0

'प्रश्न: संदेशों को अद्यतन करें s1 set is_unread = 1 आंतरिक शामिल हो (चयन नाम, MAX (ReceiveTime) max_time Messa द्वारा संदेश समूह से ... त्रुटि कोड: 1064 आपको अपने SQL वाक्यविन्यास में कोई त्रुटि है; मैन्युअल जो मेल खाता है उसे जांचें लाइन 2' – enchance

22

आप ORDER और LIMIT का उपयोग करने का प्रयास कर सकते हैं।

इस प्रयास करें:

UPDATE messages_tbl SET is_unread = 1 
WHERE name = 'John' 
ORDER BY ReceiveTime DESC 
LIMIT 1 

इस क्वेरी उच्चतम (सबसे हाल) के क्रम में पंक्तियों अद्यतन करेगा सबसे कम (सबसे पुराना) ReceiveTime करने के लिए ReceiveTimeLIMIT के साथ संयोजन में उपयोग किया गया, केवल हाल ही में ReceiveTime बदल दिया जाएगा।

+0

क्षमा करें, मैंने अपनी व्याख्या अपडेट की है। तुम्हारी गलती नहीं। – enchance

+0

@enchance - कोई समस्या नहीं, बस यह सुनिश्चित करना चाहता था कि मेरा उत्तर अभी भी आपके प्रश्न के लिए प्रासंगिक था :)। – Aiias

संबंधित मुद्दे