เทคนิค ORDER BY กับเงื่อนไข Boolean
ใน MySQL เงื่อนไข Boolean จะคืนค่า 1 (true) หรือ 0 (false) ใช้หลักการนี้เพื่อให้ 0 เรียงท้าย
รูปแบบคำสั่ง
SELECT * FROM yourTableName ORDER BY yourFieldName = 0, yourFieldName;
ตัวอย่างการสร้างตารางและข้อมูล
mysql> CREATE TABLE SortColumnZeroAtLastDemo (
-> RankNumber INT
-> );
Query OK, 0 rows affected (1.40 sec)
mysql> INSERT INTO SortColumnZeroAtLastDemo VALUES(100);
mysql> INSERT INTO SortColumnZeroAtLastDemo VALUES(0);
mysql> INSERT INTO SortColumnZeroAtLastDemo VALUES(0);
mysql> INSERT INTO SortColumnZeroAtLastDemo VALUES(50);
mysql> INSERT INTO SortColumnZeroAtLastDemo VALUES(10);
mysql> INSERT INTO SortColumnZeroAtLastDemo VALUES(0);
mysql> INSERT INTO SortColumnZeroAtLastDemo VALUES(40);
ข้อมูลก่อนเรียง
mysql> SELECT * FROM SortColumnZeroAtLastDemo;
+------------+ | RankNumber | +------------+ | 100 | | 0 | | 0 | | 50 | | 10 | | 0 | | 40 | +------------+ 7 rows in set (0.00 sec)
คำสั่งเรียง 0 ไปท้าย
mysql> SELECT * FROM SortColumnZeroAtLastDemo
-> ORDER BY RankNumber = 0, RankNumber;
+------------+ | RankNumber | +------------+ | 10 | | 40 | | 50 | | 100 | | 0 | | 0 | | 0 | +------------+ 7 rows in set (0.00 sec)
อธิบายการทำงาน:
RankNumber = 0คืนค่า 1 (true) สำหรับค่า 0, คืน 0 (false) สำหรับค่าอื่น- MySQL เรียงจากค่าน้อยไปมาก (ASC) ดังนั้น false (0) จะอยู่ก่อน true (1)
- ค่าที่ไม่ใช่ 0 จะถูกเรียงตามค่าตัวเลขปกติ
- ค่า 0 ทั้งหมดจะถูกกลุ่มไว้ท้ายสุด
รูปแบบอื่นที่เทียบเท่า:
ORDER BY CASE WHEN yourFieldName = 0 THEN 1 ELSE 0 END, yourFieldName
ORDER BY IF(yourFieldName = 0, 1, 0), yourFieldName