MySQL

2010-11-01 3 views
121

में अंतिम पंक्ति का चयन करें I SELECT एक MySQL तालिका में अंतिम पंक्ति कैसे हो सकता है?MySQL

मैं INSERT आईएनजी डेटा हूं और मुझे पिछली पंक्ति से कॉलम मान पुनर्प्राप्त करने की आवश्यकता है।

तालिका में auto_increment है।

+5

"अंतिम पंक्ति" को परिभाषित करें। उच्चतम आईडी वाला एक? या हाल ही में जोड़ा गया एक? – EboMike

+1

अंतिम पंक्ति क्या इंगित करता है - क्या तालिका में कोई auto_increment या DATETIME कॉलम है? –

+0

हां, वहां 'auto_increment' है। मैं सबसे हाल ही में जोड़ा एक चाहता हूँ। – esqew

उत्तर

272

हाँ, वहाँ में वहाँ

आप सभी पंक्तियों तालिका में के अंतिम चाहते हैं, तो इस अंत में समय जहां MAX(id) सही जवाब है है एक auto_increment है! प्रकार:

SELECT fields FROM table ORDER BY id DESC LIMIT 1; 
+3

http://stackoverflow.com/a/21683753/257319 –

+3

मुझे डर है कि अगर यह लाखों पंक्तियों को क्रमबद्ध करने की आवश्यकता है तो यह धीमा हो जाता है, है ना? – Slawa

20

ध्यान रखें कि संबंधित डेटाबेस में तालिकाओं पंक्तियों के सेट हैं। और गणित में सेट अनियंत्रित संग्रह हैं। कोई पहली या आखिरी पंक्ति नहीं है; कोई पिछली पंक्ति या अगली पंक्ति नहीं।

आपको पहले कुछ फ़ील्ड द्वारा अनियंत्रित पंक्तियों के सेट को सॉर्ट करना होगा, और फिर आप परिभाषित क्रम में परिणामसेट के माध्यम से फिर से मुक्त कर सकते हैं।

चूंकि आपके पास ऑटो वृद्धिशील क्षेत्र है, इसलिए मुझे लगता है कि आप सॉर्टिंग फ़ील्ड बनना चाहते हैं। उस मामले में, आप निम्न कर सकते हैं:

SELECT * 
FROM  your_table 
ORDER BY your_auto_increment_field DESC 
LIMIT  1; 

कैसे हम पहली your_auto_increment_field द्वारा अव्यवस्थित पंक्तियों के सेट छँटाई कर रहे हैं (या जो भी आप इसे कहा जाता है) अवरोही क्रम में देखें। फिर हम परिणाम को LIMIT 1 के साथ केवल पहली पंक्ति तक सीमित करते हैं।

4

यदि आप हाल ही में जोड़े गए एक को जोड़ना चाहते हैं, तो टाइमस्टैम्प जोड़ें और उच्चतम टाइमस्टैम्प द्वारा रिवर्स ऑर्डर में ऑर्डर करें, सीमा 1। यदि आप आईडी द्वारा जाना चाहते हैं, तो आईडी द्वारा क्रमबद्ध करें। यदि आप जो भी जोड़ते हैं उसका उपयोग करना चाहते हैं, तो mysql_insert_id का उपयोग करें।

16
कई पंक्तियों के साथ टेबल पर

दो प्रश्नों शायद तेजी से कर रहे हैं ...

SELECT @last_id := MAX(id) FROM table; 

SELECT * FROM table WHERE id = @last_id; 
6

यह सुनिश्चित बस का उपयोग करें: PDO::lastInsertId

http://php.net/manual/en/pdo.lastinsertid.php

+2

दाएं। अधिकांश सभ्य MySQL इंटरफ़ेस पुस्तकालयों के लिए समर्पित विधियां हैं, हालांकि इस प्रश्न को PHP लेकिन सामान्य MySQL वाक्यविन्यास टैग नहीं किया गया था। – vzr

9

आप दो प्रश्नों एकल में @spacepille ने सुझाव दिया गठजोड़ कर सकते हैं क्वेरी जो इस तरह दिखती है:

SELECT * FROM `table_name` WHERE id=(SELECT MAX(id) FROM `table_name`); 

इसे तेज गति से काम करना चाहिए, लेकिन INNODB तालिकाओं पर यह ऑर्डर + LIMIT की तुलना में धीमी गति से मिलीसेकंड का अंश है।

+0

यह उत्तर @ karthikeyan के answere की एक प्रति है ... पोस्ट समय देर से देखा ... – Dwza

+0

@ कार्तिकेयन ने चार दिन पहले अपना जवाब लिखा था और मैंने दिसंबर 2015 में इसका उत्तर दिया। – vzr

+0

नहीं, मैंने कुछ वर्तनी संपादित और सही की 4 दिन पहले ... पोस्ट तिथि 2014 है 'जून 14 को 9: 41' उत्तर दिया गया है कि लगभग 1 साल और 6 महीने पहले :) – Dwza

3
SELECT * FROM adds where id=(select max(id) from adds); 

अपनी तालिका में पिछले रिकॉर्ड को लाने के लिए प्रयोग किया जाता है इस क्वेरी।

-1

हर कोई ऑर्डर, अधिकतम इत्यादि का जिक्र क्यों कर रहा है?

यह लाखों और लाखों प्रविष्टियों पर विचार करने के लिए बहुत सीपीयू अनुकूल नहीं है।

एक और अधिक कुशल समाधान एक ट्रिगर बना देगा जो एक अलग तालिका में एक पंक्ति में जोड़ता है। इस तरह आप ओ (1) समय पर मूल्य प्राप्त कर सकते हैं।

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