दो कॉलम द्वारा एक MySQL तालिका का आदेश दें


228

मैं दो कॉलम द्वारा MySQL तालिका कैसे सॉर्ट करूं?

मैं जो चाहता हूं वह लेख पहले उच्चतम रेटिंग के आधार पर छांटे जाते हैं, फिर सबसे हाल की तारीख से। एक उदाहरण के रूप में, यह एक नमूना आउटपुट होगा (बाएं # रेटिंग है, फिर लेख शीर्षक, फिर लेख तिथि)

50 | यह लेख चट्टानों | फरवरी 4, 2009
35 | यह लेख बहुत अच्छा है | 1 फरवरी, 2009
5 | यह लेख इतना गर्म नहीं है | 25 जनवरी, 2009

मैं जिस प्रासंगिक एसक्यूएल का उपयोग कर रहा हूं वह है:

ORDER BY article_rating, article_time DESC

मैं एक या दूसरे से सॉर्ट कर सकता हूं, लेकिन दोनों में नहीं।

जवाबों:


480

डिफ़ॉल्ट सॉर्टिंग आरोही है, आपको अपने आदेशों में कीवर्ड DESC को जोड़ना होगा:

ORDER BY article_rating DESC, article_time DESC

अजीब। जब मेरे पास दो कॉलम होते हैं, तो नाम और कुल और वर्णानुक्रम में नाम और DESC द्वारा कुल क्रम करना चाहते हैं, तो मैं केवल यह देखता हूं, कि यह नाम से आदेश दिया गया था, लेकिन कुल मिलाकर नहीं
यूजीन

मैं संख्यात्मक क्षेत्रों पर बिना किसी कारण के (-1) * फ़ील्ड 1, फ़ील्ड 2 के साथ हैकिंग कर रहा हूं ... धन्यवाद।
असद हसन

हाहा .... एक अच्छी क्वेरी नहीं है, क्योंकि यदि आप कोशिश करते हैं, तो कभी भी "खाली" मान श्रेणी को पुनः व्यवस्थित नहीं कर सकते ... 2009 में अच्छा प्रयास करें .. लेकिन 2015 में सही ढंग से काम नहीं करते;), सही है "3 "या" 2 "उप क्वेरी
delive

मेरे मामले में ऐसी कोई क्वेरी काम नहीं कर रही है। इस मामले में, मैं सिटी के लिए छँटाई नहीं करूँगा अलग शहर का चयन करें, देश से ग्राहकों के ऑर्डर से देश डेस, सिटी डेस्क;
प्र ० ए ०

4
मुझे नहीं पता कि यह क्यों जवाब के रूप में जाँच की है अभी तक यह नहीं है। यह पहले कॉलम के बाद फिर दूसरे पर नहीं बल्कि एक ही समय में दोनों तरह से होता है।
असहाय

34
ORDER BY article_rating, article_time DESC

यदि एक ही रेटिंग वाले दो लेख हैं, तो केवल Article_time द्वारा सॉर्ट किया जाएगा। सभी से मैं आपके उदाहरण में देख सकता हूं, ठीक ऐसा ही होता है।

 primary sort                         secondary sort 
1.  50 | This article rocks          | Feb 4, 2009    3.
2.  35 | This article is pretty good | Feb 1, 2009    2.
3.  5  | This Article isn't so hot   | Jan 25, 2009   1.

पर विचार करें:

 primary sort                         secondary sort 
1.  50 | This article rocks          | Feb 2, 2009    3.
1.  50 | This article rocks, too     | Feb 4, 2009    4.
2.  35 | This article is pretty good | Feb 1, 2009    2.
3.  5  | This Article isn't so hot   | Jan 25, 2009   1.

इस उत्तर ने मुझे मदद की। थैंक्स @ टोमलक
जयन सुमुदिनी

12
ORDER BY article_rating ASC , article_time DESC

DESCअंत में अवरोही दोनों स्तंभों को छाँट लेंगे। आपको निर्दिष्ट ASCकरना होगा कि क्या आप इसे अन्यथा चाहते हैं


8

यह शायद किसी ऐसे व्यक्ति की मदद करता है जो दो स्तंभों द्वारा तालिका को सॉर्ट करने के तरीके की तलाश में है, लेकिन पार्सल तरीके से। इसका मतलब कुल मिलाकर छँटाई समारोह का उपयोग करके दो प्रकारों को संयोजित करना है। यह बहुत उपयोगी है जब उदाहरण के लिए फ़ुलटेक्स्ट खोज का उपयोग करके लेखों को पुनर्प्राप्त किया जाता है और लेख प्रकाशित होने की तारीख से भी संबंधित होता है।

यह केवल उदाहरण है, लेकिन यदि आप इस विचार को पकड़ते हैं तो आप उपयोग करने के लिए बहुत सारे सामूहिक कार्य पा सकते हैं। आप एक सेकेण्ड को पसंद करने के लिए स्तंभों का वजन भी कर सकते हैं। मेरा कार्य दोनों प्रकार से चरम सीमा पर है, इस प्रकार सबसे मूल्यवान पंक्तियाँ शीर्ष पर हैं।

क्षमा करें यदि इस कार्य को करने के लिए सरल उपाय मौजूद हैं, लेकिन मुझे कोई नहीं मिला है।

SELECT
 `id`,
 `text`,
 `date`
 FROM
   (
   SELECT
     k.`id`,
     k.`text`,
     k.`date`,
     k.`match_order_id`,
     @row := @row + 1 as `date_order_id`
     FROM
     (
       SELECT
         t.`id`,
         t.`text`,
         t.`date`,
         @row := @row + 1 as `match_order_id`
         FROM
         (
           SELECT
             `art_id` AS `id`,
             `text`   AS `text`,
             `date`   AS `date`,
             MATCH (`text`) AGAINST (:string) AS `match`
             FROM int_art_fulltext
             WHERE MATCH (`text`) AGAINST (:string IN BOOLEAN MODE)
             LIMIT 0,101
         ) t,
         (
           SELECT @row := 0
         ) r
         ORDER BY `match` DESC
     ) k,
     (
       SELECT @row := 0
     ) l
     ORDER BY k.`date` DESC
   ) s
 ORDER BY (1/`match_order_id`+1/`date_order_id`) DESC

34
ओह माय गॉड आप इतने आसान सवाल के लिए ऐसा कोड क्यों पोस्ट करते हैं।
बेन सिंक्लेयर

4

निम्नलिखित आपके डेटा को अवरोही क्रम में दोनों कॉलम के आधार पर आदेश देगा।

ORDER BY article_rating DESC, article_time DESC

3
4 साल बाद स्वीकार किए गए उत्तर की एक प्रति कैसे प्राप्त होती है?
स्टैक अंडरफ्लो

स्पष्टीकरण के कारण हो सकता है: पी
रिजवान हैदर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.