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

เรียงลำดับข้อมูลใน MySQL ตามลำดับ ID ที่กำหนดเองด้วย ORDER BY FIELD()

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

เมื่อต้องการเรียงลำดับแถวตามลำดับ ID ที่ไม่ใช่ลำดับตัวเลขหรือตัวอักษรธรรมดา เราใช้ฟังก์ชัน FIELD() ในคำสั่ง ORDER BY

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

mysql> CREATE TABLE DemoTable (
    ClientId VARCHAR(40),
    ClientName VARCHAR(40)
);
Query OK, 0 rows affected (0.55 sec)

mysql> INSERT INTO DemoTable VALUES('987_John','John');
mysql> INSERT INTO DemoTable VALUES('1000_Sam','Sam');
mysql> INSERT INTO DemoTable VALUES('777_Carol','Carol');
mysql> INSERT INTO DemoTable VALUES('2000_Bob','Bob');

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

mysql> SELECT * FROM DemoTable;

ผลลัพธ์:

+-----------+------------+
| ClientId  | ClientName |
+-----------+------------+
| 987_John  | John       |
| 1000_Sam  | Sam        |
| 777_Carol | Carol      |
| 2000_Bob  | Bob        |
+-----------+------------+
4 rows in set (0.00 sec)

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

mysql> SELECT * FROM DemoTable
    ORDER BY FIELD(ClientId, '1000_Sam', '2000_Bob', '777_Carol', '987_John');

ผลลัพธ์:

+-----------+------------+
| ClientId  | ClientName |
+-----------+------------+
| 1000_Sam  | Sam        |
| 2000_Bob  | Bob        |
| 777_Carol | Carol      |
| 987_John  | John       |
+-----------+------------+
4 rows in set (0.04 sec)

คำอธิบาย

  • FIELD(ClientId, '1000_Sam', '2000_Bob', ...) : คืนค่าตำแหน่ง (1-based) ของ ClientId ในรายการที่กำหนด
  • แถวที่ไม่มีในรายการจะได้ค่า 0 และจะถูกเรียงก่อน (หากต้องการให้อยู่ท้าย ให้เพิ่มเงื่อนไข)
  • เหมาะสำหรับการเรียงตามลำดับความสำคัญ, สถานะ, หรือหมวดหมู่ที่กำหนดเอง