2009-11-27 12 views
5

माइस्क्ल में, जब आप एक चुनिंदा SQL कथन निष्पादित करते हैं, तो यदि आप सॉर्टिंग क्लॉज को शामिल नहीं करते हैं, तो डिफ़ॉल्ट ऑर्डरिंग को कैसे उलटाना है, तो एक डिफ़ॉल्ट ऑर्डरिंग है? बस DESC जोड़ें?MySQL में डिफ़ॉल्ट ऑर्डरिंग को कैसे उलटें?

+0

डुप्लिकेट: http://stackoverflow.com/questions/1793147/sql-best-practice-to-deal-with-default-sort-order/1793162#1793162 –

+0

"डिफ़ॉल्ट क्रम" जैसी कोई चीज़ नहीं है तो आप इसे "रिवर्स" नहीं कर सकते हैं। –

उत्तर

3

यदि आप खंड द्वारा ऑर्डर निर्दिष्ट नहीं करते हैं तो कोई गारंटीकृत आदेश नहीं है, इस प्रकार 'डिफ़ॉल्ट आदेश के विपरीत' अपरिभाषित है।

+0

उन लोगों के लिए जो दावा किए गए दावों का बैक अप लेने के लिए साक्ष्य के साथ उत्तर पसंद करते हैं: https://stackoverflow.com/questions/8746519/sql-what-is-the-default-order-by-of-queries – Patrick

1

मुझे लगता है कि आपको वास्तव में इच्छित आदेश निर्दिष्ट करके बेहतर सेवा दी जाएगी। टेबल्स, उनकी प्रकृति से, कोई आदेश नहीं है। यह शायद उस क्रम में प्रदर्शित होता है जिसमें पंक्तियां डाली गई थीं - हालांकि इस गारंटी में कोई गारंटी नहीं है कि यह उस क्रम में रहेगा।

काफी संभावनाएँ हैं, तो आप शायद सिर्फ इस जोड़ना चाहते हैं:

ORDER BY id DESC 

... समय के सबसे अधिक के बाद से, लोगों को एक स्वत: incrementing फ़ील्ड "आईडी"

+0

लेकिन क्या करुणा है, तालिका में कोई "आईडी" फ़ील्ड नहीं है। – Steven

+0

लेकिन यदि कोई आईडी फ़ील्ड नहीं है, या समतुल्य है, तो क्या ऑर्डर सार्थक है? – pavium

+0

मुझे लगता है कि पंक्तियों को डालने वाले डिफ़ॉल्ट क्रम में, डिफ़ॉल्ट क्रम "सबसे पहले डाला गया, आखिरी बार" है। मैं इसे "पहले डाला गया, पहले बाहर" में बदलना चाहता हूं। – Steven

5

कहा जाता है का उपयोग करें यदि आप चाहते हैं लगातार आदेश देने के लिए डेटा, आपको ORDER BY का उपयोग करना होगा जिसके बाद आप कॉलम (ओं) को क्वेरी ऑर्डर करना चाहते हैं। ASC डिफ़ॉल्ट है, इसलिए आपको इसे निर्दिष्ट करने की आवश्यकता नहीं है। आईई:

ORDER BY your_column ASC 

एएससी/DESC एक प्रति स्तंभ आधार पर है:

ORDER BY your_column 

... के बराबर है। उदाहरण के लिए:

ORDER BY first_column, second_column DESC 

... इसका मतलब है कि क्वेरी first_column, second_column अवरोही क्रम में आरोही क्रम में उपयोग करते हुए एक संयोजन के रूप resultset सॉर्ट होगा।

+0

मुझे जिस क्रम की आवश्यकता है वह उल्टा क्रम है जिसमें पंक्तियां डाली गई थीं। "पहले डाला गया, पहले बाहर"। – Steven

+1

@ स्टेवेन: इससे पहले कि मैं सुझाव दे कि मैं क्या उपयोग कर सकता हूं, आपको अपने डेटाबेस से 'DESCRIBE [आपकी तालिका का नाम]' का आउटपुट प्रदान करना होगा। यदि आपके पास ऑटोऑन प्राथमिक कुंजी कॉलम है - इसे 'एएससी' द्वारा ऑर्डर करें।डेटाटाइप डेटाटाइप का उपयोग करते हुए अगली सबसे अच्छी बात डेट_क्रेटेड कॉलम होगी। फिर, 'एएससी'। –

1

जब तक आप एक ORDER BY खंड में एक स्तंभ नाम निर्दिष्ट कर सकते हैं, तो आप DESC उपयोग नहीं कर सकते हैं, और आप LIMIT शामिल चाल का सहारा लेना पिछले कुछ रिकॉर्ड देखना होगा।

यह असंतोषजनक होगा, मुझे लगता है।

3

आप इसे का उपयोग कर अपने परिणाम क्षेत्रों में एक काउंटर की स्थापना की और तरह कर सकते हैं:

SELECT *, @counter := @counter + 1 AS 'counter' FROM tableName, (SELECT @counter := 0) r ORDER BY counter DESC 

मुझे लगता है कि के रूप में आप चाहते हैं कि उसे काम करेंगे।

+1

हाँ !! यह काम करता हैं ! धन्यवाद ! आपने पूरी तरह से सवाल का जवाब दिया। – Jerry

+0

@ जेरी लेकिन यह पंक्तियों को पुनर्प्राप्त करने के किसी भी क्रम के विपरीत है, जिसका कार्यान्वयन आदेश के लिए कोई गारंटीकृत कनेक्शन नहीं है, जिसके बदले में विशेष रूप से कुछ भी गारंटी नहीं है। यदि आप गारंटी की गारंटी चाहते हैं, तो इसे डेटा में होना चाहिए। * इसके अलावा * उन प्रश्नों के लिए कोई गारंटी नहीं है जो एक चर सेट और पढ़ते हैं, इसलिए इस क्वेरी में व्यवहार को अपरिभाषित किया गया है। * के लिए * पेरकोना में 5.7 लोगों के एक निश्चित हालिया निर्माण * ने कार्यान्वयन को देखते हुए देखा कि 'केस' अभिव्यक्तियों में चर के कुछ उपयोग (* इस तरह * नहीं) कुछ अनुमानित व्यवहार देता है। तक। – philipxy

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