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

เรียงลำดับค่าที่มีตัวอักษรและสัญลักษณ์ตามลำดับกำหนดเองใน MySQL ด้วย ORDER BY FIELD

การเรียงลำดับแบบกำหนดเอง (Custom Sort) ด้วย FIELD()

เมื่อต้องการเรียงลำดับค่าที่ไม่ใช่ตัวเลขหรือตัวอักษรธรรมดา (มีสัญลักษณ์, underscore, plus) ตามลำดับที่เรากำหนด เราใช้ ORDER BY FIELD(column, val1, val2, ...)

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

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

mysql> INSERT INTO DemoTable VALUES('Java_1+');
mysql> INSERT INTO DemoTable VALUES('MySQL_23+');
mysql> INSERT INTO DemoTable VALUES('MongoDB++');
mysql> INSERT INTO DemoTable VALUES('C++_23');

แสดงข้อมูลทั้งหมด (ลำดับปกติ)

mysql> SELECT * FROM DemoTable;

ผลลัพธ์:

+-----------+
| Title     |
+-----------+
| Java_1+   |
| MySQL_23+ |
| MongoDB++ |
| C++_23    |
+-----------+
4 rows in set (0.00 sec)

คำสั่งเรียงตามลำดับที่กำหนด

mysql> SELECT * FROM DemoTable
    ORDER BY FIELD(Title, 'MySQL_23+', 'C++_23', 'Java_1+', 'MongoDB++');

ผลลัพธ์:

+-----------+
| Title     |
+-----------+
| MySQL_23+ |
| C++_23    |
| Java_1+   |
| MongoDB++ |
+-----------+
4 rows in set (0.00 sec)

คำอธิบาย

  • FIELD(Title, 'MySQL_23+', 'C++_23', ...) : คืนค่าตำแหน่ง (1,2,3,4) ตามลำดับในรายการ
  • MySQL จะเรียงตามตัวเลขที่ FIELD คืนมา (1 ก่อน 2 ก่อน 3 ...)
  • ค่าที่ไม่อยู่ในรายการ FIELD จะได้ 0 และจะถูกเรียงก่อน (หากต้องการให้ท้าย ให้เพิ่มเงื่อนไข)
  • เหมาะสำหรับการเรียงสถานะ, หมวดหมู่, หรือรหัสที่มีรูปแบบซับซ้อน