MySQL में CASE और INSTR() का उपयोग करके कीवर्ड-आधारित कस्टम सॉर्टिंग
जब आपको किसी टेक्स्ट कॉलम में विशिष्ट कीवर्ड की उपस्थिति या स्थिति के आधार पर परिणाम क्रमबद्ध करने हों, तो CASE स्टेटमेंट के साथ INSTR() फ़ंक्शन का उपयोग करें।
उदाहरण के साथ पूर्ण कार्यान्वयन
आइए पहले एक टेबल बनाते हैं:
mysql> CREATE TABLE DemoTable602 (GameName TEXT);
रिकॉर्ड डालना
mysql> INSERT INTO DemoTable602 VALUES('Candy cash game'), ('Pubg'), ('cash Candy game'), ('subway');
सभी रिकॉर्ड प्रदर्शित करना
mysql> SELECT * FROM DemoTable602;
आउटपुट:
+-----------------+
| GameName |
+-----------------+
| Candy cash game |
| Pubg |
| cash Candy game |
| subway |
+-----------------+
4 rows in set (0.00 sec)
कीवर्ड मैच के साथ ORDER BY क्वेरी
mysql> SELECT * FROM DemoTable602
ORDER BY
CASE WHEN INSTR(GameName, 'Candy') = 0 THEN 1 ELSE 0 END,
INSTR(GameName, 'cash') DESC;
आउटपुट:
+-----------------+
| GameName |
+-----------------+
| Candy cash game |
| cash Candy game |
| Pubg |
| subway |
+-----------------+
4 rows in set (0.00 sec)
व्याख्या:
- पहला ORDER BY क्लॉज:
CASE WHEN INSTR(GameName, 'Candy') = 0 THEN 1 ELSE 0 ENDINSTR()सबस्ट्रिंग की स्थिति लौटाता है (नहीं मिलने पर 0)- 'Candy' वाले रिकॉर्ड को 0 (उच्च प्राथमिकता) मिलता है
- 'Candy' न रखने वालों को 1 (निम्न प्राथमिकता) मिलता है
- दूसरा ORDER BY क्लॉज:
INSTR(GameName, 'cash') DESC- 'cash' की स्थिति के अनुसार अवरोही क्रम
- पहले आने वाले 'cash' को उच्च प्राथमिकता
परिणाम क्रम तर्क:
- "Candy cash game" - 'Candy' है (प्राथमिकता 0), 'cash' स्थिति 6 पर
- "cash Candy game" - 'Candy' है (प्राथमिकता 0), 'cash' स्थिति 1 पर (उच्च)
- "Pubg" - 'Candy' नहीं (प्राथमिकता 1)
- "subway" - 'Candy' नहीं (प्राथमिकता 1)
उन्नत पैटर्न: एकाधिक कीवर्ड प्राथमिकता
SELECT * FROM products
ORDER BY
CASE WHEN name LIKE '%premium%' THEN 1
WHEN name LIKE '%pro%' THEN 2
WHEN name LIKE '%basic%' THEN 3
ELSE 4 END,
name;
यह उत्पादों को प्रीमियम → प्रो → बेसिक → अन्य के क्रम में सॉर्ट करता है।