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

MySQL เรียงลำดับผลลัพธ์ตามตำแหน่งใน IN Clause

ORDER BY ตามลำดับใน IN ด้วย FIND_IN_SET()

คำสั่ง IN ไม่รับประกันลำดับ ใช้ FIND_IN_SET() เพื่อจัดเรียงตามตำแหน่งในรายการ

ตัวอย่าง

CREATE TABLE recordSetOrderDemo (
    EmployeeId INT, EmployeeName VARCHAR(30)
);

INSERT INTO recordSetOrderDemo VALUES
(20, 'John'), (10, 'Larry'), (100, 'Mike'), (50, 'Sam'), (10, 'David');

Query ปกติ (ลำดับไม่แน่นอน)

SELECT * FROM recordSetOrderDemo WHERE EmployeeId IN (100, 10, 20, 50);

Query เรียงตาม IN List

SELECT * FROM recordSetOrderDemo 
WHERE EmployeeId IN (100, 10, 20, 50)
ORDER BY FIND_IN_SET(EmployeeId, '100,10,20,50');

ผลลัพธ์

+------------+--------------+
| EmployeeId | EmployeeName |
+------------+--------------+
| 100        | Mike         |
| 10         | Larry        |
| 10         | David        |
| 20         | John         |
| 50         | Sam          |
+------------+--------------+

คำอธิบาย

  • FIND_IN_SET(str, strlist) คืนตำแหน่ง (1-based) ของ str ใน strlist
  • strlist ต้องเป็นสตริงคั่นด้วยคอมม่า ไม่มีช่องว่าง
  • ค่าที่ไม่อยู่ใน List จะได้ 0 (จะอยู่บนสุดถ้า ASC)

MySQL 8.0+ ใช้ FIELD()

ORDER BY FIELD(EmployeeId, 100, 10, 20, 50)

FIELD() เร็วกว่าและรองรับตัวเลขโดยตรง ไม่ต้องเป็น String