Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

จัดเรียง TIMESTAMP เรียงล่าสุดก่อน แต่เอา 0000-00-00 00:00:00 ไว้หน้าสุดใน MySQL

เมื่อต้องการจัดเรียง 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