MySQL से अंतिम N पंक्तियों का चयन करें


121

मैं आईडी नाम वाले कॉलम के भीतर MySQL डेटाबेस से अंतिम 50 पंक्तियों का चयन करना चाहता हूं जो प्राथमिक कुंजी है । लक्ष्य यह है कि एएससी क्रम में आईडी द्वारा पंक्तियों को क्रमबद्ध किया जाना चाहिए , यही कारण है कि यह क्वेरी काम नहीं कर रही है

SELECT 
    *
FROM
    `table`
ORDER BY id DESC
LIMIT 50;

यह भी उल्लेखनीय है कि पंक्तियों में हेरफेर किया जा सकता है (हटा दिया गया) और इसीलिए निम्नलिखित क्वेरी या तो काम नहीं कर रही है

SELECT 
    *
FROM
    `table`
WHERE
    id > ((SELECT 
            MAX(id)
        FROM
            chat) - 50)
ORDER BY id ASC;

प्रश्न : MySQL डेटाबेस से अंतिम N पंक्तियों को पुनः प्राप्त करना कैसे संभव है, जिन्हें हेरफेर किया जा सकता है और ASC क्रम में हो सकता है?

जवाबों:


236

आप इसे सब-क्वेरी के साथ कर सकते हैं:

SELECT * FROM (
    SELECT * FROM table ORDER BY id DESC LIMIT 50
) sub
ORDER BY id ASC

यह से अंतिम 50 पंक्तियों का चयन करेगा table, और फिर उन्हें आरोही क्रम में आदेश देगा।


5
^ FYI करें, मुझे पता है कि यह लेख MySQL के बारे में है, लेकिन यह सलाह देना चाहता था कि @ DiegoDD की टिप्पणी के जवाब में, बाहरी चयन और उपनाम छोड़ कर Postgres (9.3.5) में काम नहीं करता है। मुझे 'त्रुटि: एकाधिक आदेश द्वारा खंड अनुमति नहीं है' मिलता है। हालाँकि, स्वीकृत उत्तर, पोस्टग्रेज में अपेक्षित रूप से काम करता है
एलनविले 20

इसके लिए धन्यवाद! इस क्वेरी से मुझे अपनी समस्या ठीक करने में मदद मिली। मैं इसके लिए घंटों खोज रहा हूँ
अरशद

1
मैं इस क्वेरी को JOINS के साथ कैसे लागू कर सकता हूं?
GYaN

@ GYaN आंतरिक उप क्वेरी में जुड़ता है
शेख हमजा

9
SELECT * FROM table ORDER BY id DESC,datechat desc LIMIT 50

यदि आपके पास कोई दिनांक फ़ील्ड है, जो उस दिनांक (और समय) को संग्रहीत कर रहा है, जिस पर चैट भेजा गया था या कोई भी फ़ील्ड जो क्रमिक रूप से भरा हुआ है (DESC द्वारा आदेश) या desinscrementally (ASC द्वारा आदेश) प्रति पंक्ति डेटा को दूसरे स्तंभ के रूप में रखा गया है जो डेटा ऑर्डर होना चाहिए।

मेरे लिए यही काम है !!!! आशा है कि यह मदद करेगा !!!!


7
SELECT * FROM table ORDER BY id DESC LIMIT 50

सहेजने के संसाधन एक क्वेरी बनाते हैं, नेस्टेड क्वेरी करने की कोई आवश्यकता नहीं है


1
आपकी क्वेरी परिणाम उल्टा (अवरोही आईडी) में लौटाएगी। @ newfurniturey की क्वेरी में LAST सम्मिलित पंक्तियाँ ( LIMITअवरोही आईडी पर) मिलेंगी , और अंतिम परिणाम में आरोही आईडी होगा।
रॉबिन कैंटर्स

1
आपके समाधान को सही क्रम में परिणाम नहीं मिलेगा इसके बजाय यह उन्हें उलट देगा इस प्रकार उन्हें फिर से सही क्रम में लाने के लिए एक और आदेश की आवश्यकता है
कोबरा 47

1
लेकिन फिर आप बस एक php array_reverse () या जो कुछ भी समकक्ष हो आपकी पसंद की स्क्रिप्टिंग भाषा में है। डेटाबेस को वह काम करने की आवश्यकता नहीं है।
जो

6
@ जो प्रश्न में कुछ भी नहीं है जो इंगित करता है कि एक स्क्रिप्टिंग भाषा का उपयोग किया जा रहा है, इसलिए यह बनाने के लिए एक सुरक्षित धारणा नहीं है।
निक कॉन्स

अपेक्षित उत्तर को पहले से ही डेटाबेस क्वेरी का उपयोग करके सॉर्ट किया जाना चाहिए।
d4ryl3

-2
select * from Table ORDER BY id LIMIT 30

नोट: * idअद्वितीय होना चाहिए। * आप 30क्वेरी में प्रतिस्थापित करके दी गई पंक्तियों की संख्या को नियंत्रित कर सकते हैं


1
क्या आप अपना समाधान बता सकते हैं? कोष्ठक में व्याख्या कोड प्रतीत होता है, अपने कोड के ऊपर / नीचे एक पूरा वाक्य रखें। धन्यवाद
deHaar
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.