ใช้ฟังก์ชัน FIELD() ใน ORDER BY เพื่อเรียงผลลัพธ์ตามลำดับค่าใน IN()
ไวยากรณ์
SELECT * FROM yourTableName
WHERE yourColumn IN ('value1', 'value2', ...)
ORDER BY FIELD(yourColumn, 'value1', 'value2', ...);
ตัวอย่างการใช้งาน
สร้างตาราง SelectOrderbyField:
mysql> CREATE TABLE SelectOrderbyField (
-> Id INT NOT NULL AUTO_INCREMENT,
-> Name VARCHAR(30),
-> Age INT,
-> PRIMARY KEY(Id)
-> );
เพิ่มข้อมูล:
mysql> INSERT INTO SelectOrderbyField(Name, Age) VALUES('John', 23);
mysql> INSERT INTO SelectOrderbyField(Name, Age) VALUES('Carol', 25);
mysql> INSERT INTO SelectOrderbyField(Name, Age) VALUES('Bob', 21);
mysql> INSERT INTO SelectOrderbyField(Name, Age) VALUES('Mike', 28);
mysql> INSERT INTO SelectOrderbyField(Name, Age) VALUES('Sam', 26);
mysql> INSERT INTO SelectOrderbyField(Name, Age) VALUES('David', 23);
ข้อมูลทั้งหมด
+----+-------+------+ | Id | Name | Age | +----+-------+------+ | 1 | John | 23 | | 2 | Carol | 25 | | 3 | Bob | 21 | | 4 | Mike | 28 | | 5 | Sam | 26 | | 6 | David | 23 | +----+-------+------+
กรณี 1: เรียงตาม Id ในลำดับที่กำหนด
mysql> SELECT * FROM SelectOrderbyField
-> WHERE Id IN (5,1,3,2,6,4)
-> ORDER BY FIELD(Id, 5,1,3,2,6,4);
ผลลัพธ์
+----+-------+------+ | Id | Name | Age | +----+-------+------+ | 5 | Sam | 26 | | 1 | John | 23 | | 3 | Bob | 21 | | 2 | Carol | 25 | | 6 | David | 23 | | 4 | Mike | 28 | +----+-------+------+
กรณี 2: เรียงตาม Name ในลำดับที่กำหนด
mysql> SELECT * FROM SelectOrderbyField
-> WHERE Name IN ('Sam','John','Bob','Carol','David','Mike')
-> ORDER BY FIELD(Name, 'Sam','John','Bob','Carol','David','Mike');
ผลลัพธ์
+----+-------+------+ | Id | Name | Age | +----+-------+------+ | 5 | Sam | 26 | | 1 | John | 23 | | 3 | Bob | 21 | | 2 | Carol | 25 | | 6 | David | 23 | | 4 | Mike | 28 | +----+-------+------+
ประโยชน์: ควบคุมลำดับการแสดงผลให้ตรงกับ Business Logic ที่ต้องการ