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

การเรียงลำดับขั้นสูงใน MySQL: นำสตริงขึ้นต้นด้วย J ไปอยู่ท้ายสุด

การเรียงลำดับแบบกำหนดเองด้วย ORDER BY LIKE

เราสามารถใช้เงื่อนไข LIKE ใน ORDER BY เพื่อบังคับให้แถวที่ตรงกับรูปแบบ (Pattern) อยู่ท้ายสุด (หรือหน้าสุด) ในขณะที่แถวอื่นเรียงตามปกติ

สร้างตารางและเพิ่มข้อมูล

mysql> CREATE TABLE DemoTable (Name VARCHAR(100));
Query OK, 0 rows affected (0.60 sec)

mysql> INSERT INTO DemoTable VALUES('John');
mysql> INSERT INTO DemoTable VALUES('Adam');
mysql> INSERT INTO DemoTable VALUES('Chris');
mysql> INSERT INTO DemoTable VALUES('Jace');
mysql> INSERT INTO DemoTable VALUES('David');
mysql> INSERT INTO DemoTable VALUES('Sam');

แสดงข้อมูลทั้งหมด

mysql> SELECT * FROM DemoTable;

ผลลัพธ์:

+-------+
| Name  |
+-------+
| John  |
| Adam  |
| Chris |
| Jace  |
| David |
| Sam   |
+-------+
6 rows in set (0.00 sec)

คำสั่งเรียง A-Z แต่นำชื่อขึ้นต้น J ไปท้ายสุด

mysql> SELECT * FROM DemoTable ORDER BY Name LIKE 'J%', Name;

ผลลัพธ์:

+-------+
| Name  |
+-------+
| Adam  |
| Chris |
| David |
| Sam   |
| Jace  |
| John  |
+-------+
6 rows in set (0.00 sec)

คำอธิบาย

  • Name LIKE 'J%' : คืนค่า 1 (TRUE) ถ้าชื่อขึ้นต้นด้วย J, 0 (FALSE) ถ้าไม่ใช่
  • ORDER BY Name LIKE 'J%', Name : เรียงตามค่า Boolean ก่อน (0 ก่อน 1) แล้วค่อยเรียงตาม Name ตามปกติ
  • ผลคือ ชื่อที่ไม่ขึ้นต้น J (Adam, Chris, David, Sam) เรียง A-Z ก่อน แล้วค่อยชื่อขึ้นต้น J (Jace, John) เรียง A-Z ท้ายสุด
  • รูปแบบ 'J%' ใช้ Wildcard % แทนตัวอักษรต่อไปทุกตัว