เมื่อต้องการจัดเรียง TIMESTAMP ใหม่ไปเก่า (DESC) แต่ต้องการให้ค่า Zero timestamp (0000-00-00 00:00:00) อยู่บนสุด สามารถใช้เงื่อนไข Boolean ใน ORDER BY ได้
ตัวอย่างการสร้างตาราง
mysql> create table DemoTable (
`timestamp` timestamp );
Query OK, 0 rows affected (1.12 sec)
เพิ่มข้อมูลรวม Zero timestamp
mysql> insert into DemoTable values(now());
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable values('00:00:00');
Query OK, 1 row affected (0.73 sec)
mysql> insert into DemoTable values('2018-01-10 12:34:45');
Query OK, 1 row affected (0.80 sec)
mysql> insert into DemoTable values('2019-12-31 10:50:45');
Query OK, 1 row affected (0.84 sec)
แสดงข้อมูลก่อนจัดเรียง
mysql> select * from DemoTable;
+---------------------+ | timestamp | +---------------------+ | 2019-08-17 06:17:12 | | 0000-00-00 00:00:00 | | 2018-01-10 12:34:45 | | 2019-12-31 10:50:45 | +---------------------+ 4 rows in set (0.00 sec)
คำสั่ง ORDER BY ใส่ Zero timestamp ไว้บนสุด แล้วตามด้วย DESC
mysql> select * from DemoTable order by (`timestamp` = 0) DESC, `timestamp` DESC;
ผลลัพธ์
+---------------------+ | timestamp | +---------------------+ | 0000-00-00 00:00:00 | | 2019-12-31 10:50:45 | | 2019-08-17 06:17:12 | | 2018-01-10 12:34:45 | +---------------------+ 4 rows in set (0.00 sec)
คำอธิบาย: (`timestamp` = 0) เป็นนิพจน์ Boolean ที่คืนค่า 1 (TRUE) สำหรับ Zero timestamp และ 0 (FALSE) สำหรับค่าอื่น เรียง DESC จะทำให้ TRUE (1) อยู่ก่อน FALSE (0) แล้วค่อยเรียง timestamp ปกติ DESC ต่อ
เทคนิคนี้ใช้ได้กับ: การจัดลำดับความสำคัญ พิเศษ (Priority sorting) เช่น ใส่ค่า NULL ไว้บนสุด: ORDER BY (col IS NULL) DESC, col ASC