MySQL में किसी विशिष्ट मान वाली पंक्ति को परिणाम सेट में सबसे पहले दिखाने और शेष पंक्तियों को किसी अन्य कॉलम (जैसे तारीख) के अनुसार क्रमबद्ध करने के लिए, ORDER BY में बूलियन एक्सप्रेशन का उपयोग करें।
उदाहरण: 'David' को पहले दिखाएं, बाकी ShippingDate द्वारा क्रमबद्ध
डेमो टेबल बनाएं:
mysql> CREATE TABLE DemoTable1932 (
UserName VARCHAR(20),
ShippingDate DATE
);
डेटा इन्सर्ट करें:
mysql> INSERT INTO DemoTable1932 VALUES
('Chris', '2018-10-12'),
('David', '2019-04-11'),
('Mike', '2016-12-04'),
('Carol', '2017-12-26');
डेटा:
+----------+--------------+ | UserName | ShippingDate | +----------+--------------+ | Chris | 2018-10-12 | | David | 2019-04-11 | | Mike | 2016-12-04 | | Carol | 2017-12-26 | +----------+--------------+
क्वेरी:
mysql> SELECT * FROM DemoTable1932 ORDER BY UserName = 'David' DESC, ShippingDate;
आउटपुट (David पहले, बाकी तारीख ASC):
+----------+--------------+ | UserName | ShippingDate | +----------+--------------+ | David | 2019-04-11 | | Mike | 2016-12-04 | | Carol | 2017-12-26 | | Chris | 2018-10-12 | +----------+--------------+
व्याख्या
UserName = 'David': बूलियन एक्सप्रेशन, David के लिए TRUE (1), अन्य के लिए FALSE (0)DESC: TRUE (1) को FALSE (0) से पहले रखता है → David शीर्ष परShippingDate: शेष पंक्तियों (0 ग्रुप) के लिए द्वितीयक क्रम - ASC डिफ़ॉल्ट
सामान्य पैटर्न
-- एकाधिक प्राथमिकता मान
ORDER BY (status IN ('urgent', 'high')) DESC, created_at
-- केस स्टेटमेंट के साथ बहु-स्तरीय प्राथमिकता
ORDER BY CASE priority
WHEN 'critical' THEN 1
WHEN 'high' THEN 2
WHEN 'normal' THEN 3
ELSE 4
END, created_at
उपयोग के मामले
- पिन की गई/फीचर्ड आइटम शीर्ष पर
- वर्तमान यूज़र के रिकॉर्ड पहले, बाकी तारीख के अनुसार
- विशिष्ट श्रेणी प्राथमिकता, फिर कालानुक्रमिक
- खोज परिणाम: सटीक मिलान पहले, फिर फजी मिलान
प्रदर्शन
- बूलियन एक्सप्रेशन इंडेक्स उपयोग नहीं रोकता (द्वितीयक क्रम इंडेक्स उपयोग कर सकता है)
- फाइलसॉर्ट तब होता है जब प्राथमिक क्रम इंडेक्स से मेल नहीं खाता
- बड़े डेटासेट के लिए, प्राथमिकता कॉलम पर इंडेक्स बनाएं
यह तकनीक सरल, पठनीय है, और एप्लिकेशन कोड में परिणाम सेट मर्ज करने की आवश्यकता से बचाती है।