MySQL में कॉलम द्वारा सॉर्ट करते समय खाली स्ट्रिंग ('') और NULL मानों को अंतिम स्थान पर रखना
सिंटैक्स:
SELECT * FROM yourTableName ORDER BY IF(yourColumnName = '' OR yourColumnName IS NULL, 1, 0), yourColumnName;
कैसे काम करता है:
IF(condition, 1, 0): खाली/NULL के लिए 1, अन्यथा 0ORDER BYपहले इस फ्लैग से सॉर्ट करता है: 0 (गैर-खाली) पहले, 1 (खाली/NULL) बाद में- फिर वास्तविक कॉलम मान से सॉर्ट करता है
व्यावहारिक उदाहरण
1. टेबल बनाएं:
mysql> CREATE TABLE emptyCellsAtEnd (ProductId VARCHAR(100)); Query OK, 0 rows affected (0.65 sec)
2. डेटा डालें (कुछ खाली):
mysql> INSERT INTO emptyCellsAtEnd VALUES('');
mysql> INSERT INTO emptyCellsAtEnd VALUES('P-1');
mysql> INSERT INTO emptyCellsAtEnd VALUES('P-2');
mysql> INSERT INTO emptyCellsAtEnd VALUES('');
mysql> INSERT INTO emptyCellsAtEnd VALUES('P-3');
mysql> INSERT INTO emptyCellsAtEnd VALUES('P-4');
mysql> INSERT INTO emptyCellsAtEnd VALUES('P-9');
mysql> INSERT INTO emptyCellsAtEnd VALUES('');
mysql> INSERT INTO emptyCellsAtEnd VALUES('P-8');
3. मूल क्रम:
+-----------+ | ProductId | +-----------+ | | ← खाली | P-1 | | P-2 | | | ← खाली | P-3 | | P-4 | | P-9 | | | ← खाली | P-8 | +-----------+ 9 rows in set (0.00 sec)
4. खाली/NULL को अंत में रखकर सॉर्ट करें:
mysql> SELECT * FROM emptyCellsAtEnd
-> ORDER BY IF(ProductId = '' OR ProductId IS NULL, 1, 0), ProductId;
+-----------+ | ProductId | +-----------+ | P-1 | | P-2 | | P-3 | | P-4 | | P-8 | | P-9 | | | ← खाली अंत में | | | | +-----------+ 9 rows in set (0.00 sec)
वैकल्पिक सिंटैक्स (अधिक पठनीय):
CASE स्टेटमेंट:
ORDER BY CASE
WHEN yourColumn IS NULL OR yourColumn = '' THEN 1
ELSE 0
END, yourColumn
COALESCE/NULLIF ट्रिक:
ORDER BY (COALESCE(NULLIF(yourColumn, ''), '~') = '~'), yourColumn
'~' ऐसा कैरेक्टर है जो सामान्य डेटा में नहीं आता (ASCII में उच्च)।
MySQL 8.0+ NULLS LAST (केवल NULL के लिए):
ORDER BY yourColumn NULLS LAST
नोट: खाली स्ट्रिंग '' के लिए काम नहीं करता, केवल NULL के लिए।
सर्वोत्तम अभ्यास:
- दोनों
IS NULLऔर=''जांचें (अगर दोनों संभव हैं) - इंडेक्स उपयोग के लिए:
ORDER BY (col IS NULL), colइंडेक्स उपयोग कर सकता है - पैजिनेशन में लगातार परिणाम के लिए टाई-ब्रेकर जोड़ें:
ORDER BY (col IS NULL), col, id