अगर मैं सही ढंग से समझ गया, तो ऐसा लगता है कि आप अपने 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
द्वारा फ़िल्टर करेंगे ... जहां तक आपके दूसरे प्रश्न का सवाल है, मुझे नहीं पता कि ऐसी किसी क्वेरी के लिए कोई नाम है या नहीं - मैं इसे "अभिव्यक्ति द्वारा क्रमित करना" कहता हूं।