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

ฟังก์ชัน FIELD() ใน MySQL: เรียงลำดับตามค่าที่กำหนดเอง

FIELD() - หาตำแหน่งของค่าในรายการ

ฟังก์ชัน FIELD() คืนค่าตำแหน่ง (index) ของค่าในรายการที่กำหนด เริ่มนับที่ 1 หากไม่พบคืน 0

รูปแบบคำสั่ง

FIELD(str, val1, val2, val3, ...)

การใช้งานกับ ORDER BY เพื่อเรียงลำดับกำหนดเอง

SELECT * FROM yourTableName 
ORDER BY FIELD(yourColumnName, yourValue1, yourValue2, yourValue3, ...) DESC;

ตัวอย่าง: เรียง StudentId ตามลำดับที่กำหนด

mysql> CREATE TABLE OrderByDemo (
    -> StudentId INT
    -> );
Query OK, 0 rows affected (0.71 sec)

mysql> INSERT INTO OrderByDemo VALUES(101);
mysql> INSERT INTO OrderByDemo VALUES(1010);
mysql> INSERT INTO OrderByDemo VALUES(1001);
mysql> INSERT INTO OrderByDemo VALUES(401);

ข้อมูลก่อนเรียง

mysql> SELECT * FROM OrderByDemo;
+-----------+
| StudentId |
+-----------+
| 101       |
| 1010      |
| 1001      |
| 401       |
+-----------+
4 rows in set (0.00 sec)

เรียงตามลำดับ: 101, 401, 1001, 1010 (DESC = 1010 ก่อน)

mysql> SELECT * FROM OrderByDemo 
    -> ORDER BY FIELD(StudentId, 101, 401, 1001, 1010) DESC;
+-----------+
| StudentId |
+-----------+
| 1010      |
| 1001      |
| 401       |
| 101       |
+-----------+
4 rows in set (0.00 sec)

การประยุกต์ใช้:

  • เรียงสถานะออเดอร์: FIELD(status, 'pending', 'processing', 'shipped', 'delivered')
  • เรียงระดับความสำคัญ: FIELD(priority, 'high', 'medium', 'low')
  • จัดกลุ่มข้อมูลตามลำดับธุรกิจที่ไม่ใช่ตัวเลข/ตัวอักษร

หมายเหตุ: FIELD() ไม่คำนึงถึง case-sensitive ต้องใช้ FIELD(BINARY column, ...) หากต้องการ case-sensitive