Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

क्या एकाधिक मानदंडों का मिलान करके ऑर्डर करने के लिए कोई SQL तकनीक है?

अगर मैं सही ढंग से समझ गया, तो ऐसा लगता है कि आप अपने ORDER BY . में अभिव्यक्तियों का उपयोग कर सकते हैं , एक तरह से निम्नलिखित स्टैक ओवरफ़्लो पोस्ट को दिए गए स्वीकृत उत्तर के समान:

इसलिए, आपकी क्वेरी कुछ इस तरह दिख सकती है:

SELECT    imageID
FROM      ...
JOIN      ...
WHERE     designID = 100          
ORDER BY  garmentID = 1 DESC,
          colorID = 5 DESC,
          sizeID = 10 DESC;

ध्यान दें कि garmentID , colorID , और sizeID WHERE . में फ़िल्टर के रूप में उपयोग नहीं किया जाता है खंड। मानों का उपयोग केवल ORDER BY . में किया जाता है भाव।

टेस्ट केस:

CREATE TABLE designs (designID int, garmentID int, colorID int, sizeID int);

INSERT INTO designs VALUES (100, 1, 1, 1);
INSERT INTO designs VALUES (100, 1, 2, 2);
INSERT INTO designs VALUES (100, 1, 5, 3);
INSERT INTO designs VALUES (100, 1, 5, 10);
INSERT INTO designs VALUES (100, 1, 5, 15);
INSERT INTO designs VALUES (100, 1, 8, 20);
INSERT INTO designs VALUES (100, 2, 5, 10);
INSERT INTO designs VALUES (100, 2, 6, 15);
INSERT INTO designs VALUES (101, 1, 1, 1);
INSERT INTO designs VALUES (101, 2, 1, 1);

परिणाम:

SELECT    * 
FROM      designs 
WHERE     designID = 100 
ORDER BY  garmentID = 1 DESC, 
          colorID = 5 DESC, 
          sizeID = 10 DESC;

+----------+-----------+---------+--------+
| designID | garmentID | colorID | sizeID |
+----------+-----------+---------+--------+
|      100 |         1 |       5 |     10 |
|      100 |         1 |       5 |      3 |
|      100 |         1 |       5 |     15 |
|      100 |         1 |       1 |      1 |
|      100 |         1 |       2 |      2 |
|      100 |         1 |       8 |     20 |
|      100 |         2 |       5 |     10 |
|      100 |         2 |       6 |     15 |
+----------+-----------+---------+--------+
8 rows in set (0.02 sec)

ध्यान दें कि निर्दिष्ट garmentID . से मेल खाने वाली पंक्ति कैसी है , colorID और sizeID पहले है। ऐसा न करने पर, garmentID . से मेल खाने वाली पंक्तियां और colorID अगले हैं। फिर वे पंक्तियाँ जो केवल garmentID . से मेल खाती हैं पालन ​​करना। फिर बाकी, जो केवल designID . से मेल खाते हैं WHERE . का फ़िल्टर खंड।

मेरा मानना ​​​​है कि एसक्यूएल में ऐसा करने लायक है। जैसा @Toby ने दूसरे उत्तर में नोट किया , आम तौर पर आपको इतनी कम संख्या में पंक्तियों को छांटते समय प्रदर्शन के बारे में चिंता करने की ज़रूरत नहीं है, यह मानते हुए कि आप हमेशा designID द्वारा फ़िल्टर करेंगे ... जहां तक ​​आपके दूसरे प्रश्न का सवाल है, मुझे नहीं पता कि ऐसी किसी क्वेरी के लिए कोई नाम है या नहीं - मैं इसे "अभिव्यक्ति द्वारा क्रमित करना" कहता हूं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. स्पीडिंग (थोक) पायथन के साथ MySQL में डालें

  2. दो कार्यशील sql प्रश्नों में शामिल होने से गलत परिणाम मिलते हैं - मैं कहाँ गलत हो रहा हूँ

  3. Google Apps स्क्रिप्ट, JDBC और MySQL दिनांक के साथ काम नहीं करता है 0000-00-00

  4. शामिल होने के साथ तालिका से डुप्लिकेट पंक्तियों को हटाएं

  5. थोक एसएमएस भेजना बीच में रुक जाता है