MySQL-এ ORDER BY IF() ব্যবহার করে কাস্টম সাজানো
MySQL-এ ডেটাকে আপনার ইচ্ছামতো নির্দিষ্ট ক্রমে সাজানোর জন্য ORDER BY IF() ফাংশন ব্যবহার করা হয়। এটি নির্দিষ্ট মানগুলোকে প্রথমে দেখায়, বাকিগুলো স্বাভাবিক ক্রমে থাকে।
সিনট্যাক্স
SELECT * FROM yourTableName ORDER BY IF(yourColumnName=yourValue1 OR yourColumnName=yourValue2 OR yourColumnName=yourValue3, yourColumnName, ~yourColumnName) ASC;
উদাহরণ সহ ব্যাখ্যা
প্রথমে একটি টেবিল তৈরি করি:
mysql> CREATE TABLE arrangeDataInSpecificOrder (
-> StudentId INT,
-> StudentName VARCHAR(20)
-> );
ডেটা ইনসার্ট করি:
mysql> INSERT INTO arrangeDataInSpecificOrder VALUES(10,'Larry'); mysql> INSERT INTO arrangeDataInSpecificOrder VALUES(15,'Mike'); mysql> INSERT INTO arrangeDataInSpecificOrder VALUES(100,'Sam'); mysql> INSERT INTO arrangeDataInSpecificOrder VALUES(70,'Carol'); mysql> INSERT INTO arrangeDataInSpecificOrder VALUES(90,'Bob'); mysql> INSERT INTO arrangeDataInSpecificOrder VALUES(300,'David');
স্বাভাবিক অবস্থায় ডেটা:
mysql> SELECT * FROM arrangeDataInSpecificOrder;
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 10 | Larry | | 15 | Mike | | 100 | Sam | | 70 | Carol | | 90 | Bob | | 300 | David | +-----------+-------------+
নির্দিষ্ট ক্রমে (300, 100, 10 প্রথমে) সাজানোর কোয়ারি:
mysql> SELECT * FROM arrangeDataInSpecificOrder
-> ORDER BY IF(StudentId=300 OR StudentId=100 OR StudentId=10, StudentId, ~StudentId) ASC;
ফলাফল:
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 10 | Larry | | 100 | Sam | | 300 | David | | 90 | Bob | | 70 | Carol | | 15 | Mike | +-----------+-------------+
ব্যাখ্যা: IF() ফাংশনে শর্ত পূরণ হলে (১০, ১০০, ৩০০) সেগুলোকে নিজস্ব মান অনুযায়ী সাজায়, বাকিগুলো ~StudentId (বিটওয়াইজ NOT) দিয়ে বড় মান হয়ে যায়, ফলে সেগুলো পরে আসে।