การเรียงลำดับแบบกำหนดเองด้วย 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 % แทนตัวอักษรต่อไปทุกตัว