MySQL-এ WHERE ... IN (...) কোয়েরির ফলাফল আপনার ইচ্ছামত ক্রমে সাজাতে FIELD() ফাংশন ব্যবহার করুন।
সিনট্যাক্স
SELECT * FROM yourTableName WHERE yourColumnName IN('value1','value2',...) ORDER BY FIELD(yourColumnName, 'value1','value2',...);
উদাহরণ
টেবিল তৈরি করি:
mysql> create table SelectOrderbyField
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Name varchar(30),
-> Age int,
-> PRIMARY KEY(Id)
-> ); Query OK, 0 rows affected (0.62 sec)
রেকর্ড যোগ করি:
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);
সকল রেকর্ড
mysql> select *from SelectOrderbyField;
আউটপুট
+----+-------+------+ | Id | Name | Age | +----+-------+------+ | 1 | John | 23 | | 2 | Carol | 25 | | 3 | Bob | 21 | | 4 | Mike | 28 | | 5 | Sam | 26 | | 6 | David | 23 | +----+-------+------+ 6 rows in set (0.00 sec)
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 | +----+-------+------+ 6 rows in set (0.00 sec)
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 | +----+-------+------+ 6 rows in set (0.03 sec)