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

MySQL SELECT WHERE IN เรียงลำดับตามลำดับที่ระบุด้วย FIELD()

ใช้ฟังก์ชัน 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 ที่ต้องการ