Mặc định IN không giữ thứ tự. Dùng FIND_IN_SET() trong ORDER BY để sắp xếp theo thứ tự liệt kê trong IN.
Cú pháp:
SELECT * FROM yourTableName WHERE yourColumnName IN (val1,val2,val3) ORDER BY FIND_IN_SET(yourColumnName, 'val1,val2,val3');
Tạo bảng:
mysql> CREATE TABLE FindInSetDemo (Id INT, Name VARCHAR(20), Age INT);
Chèn dữ liệu (ID lộn xộn):
mysql> INSERT INTO FindInSetDemo VALUES(10,'John',23), (1,'Carol',21), (4,'Bob',25), (6,'Sam',26), (7,'Maxwell',29), (8,'Mike',22), (2,'David',27), (3,'James',20);
Truy vấn sắp xếp theo thứ tự IN (1,4,6,7):
mysql> SELECT * FROM FindInSetDemo WHERE Id IN (1,4,6,7) ORDER BY FIND_IN_SET(Id, '1,4,6,7');
Kết quả (theo đúng thứ tự 1,4,6,7):
+------+---------+------+ | Id | Name | Age | +------+---------+------+ | 1 | Carol | 21 | | 4 | Bob | 25 | | 6 | Sam | 26 | | 7 | Maxwell | 29 | +------+---------+------+