কম্পিউটার টিউটোরিয়াল

MySQL-এ UNION না ব্যবহার করে SELECT অর্ডার সংরক্ষণ করা

SELECT অর্ডার সংরক্ষণের জন্য CASE স্টেটমেন্ট ব্যবহার করা ভালো। UNION ব্যবহার না করুন। প্রথমে একটি টেবিল তৈরি করি:

mysql> CREATE TABLE DemoTable (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ShippingDate DATETIME
);

রেকর্ড যোগ করি:

mysql> INSERT INTO DemoTable(ShippingDate) VALUES('2019-04-21');
mysql> INSERT INTO DemoTable(ShippingDate) VALUES('2019-01-01');
mysql> INSERT INTO DemoTable(ShippingDate) VALUES('2019-05-11');
mysql> INSERT INTO DemoTable(ShippingDate) VALUES('2018-12-31');
mysql> INSERT INTO DemoTable(ShippingDate) VALUES('2019-02-18');

সকল রেকর্ড দেখতে:

mysql> SELECT * FROM DemoTable;

আউটপুট:

+----+---------------------+
| Id | ShippingDate        |
+----+---------------------+
| 1  | 2019-04-21 00:00:00 |
| 2  | 2019-01-01 00:00:00 |
| 3  | 2019-05-11 00:00:00 |
| 4  | 2018-12-31 00:00:00 |
| 5  | 2019-02-18 00:00:00 |
+----+---------------------+

CASE ব্যবহার করে অর্ডার সংরক্ষণের কোয়েরি (আগামী তারিখগুলো আগে, তারপর অতীতের তারিখ):

mysql> SELECT * FROM DemoTable 
ORDER BY CASE 
    WHEN ShippingDate < CURDATE() THEN ShippingDate 
    ELSE CURDATE() 
END DESC, ShippingDate ASC;

আউটপুট (ধরে নিচ্ছি CURDATE() = '2019-06-04'):

+----+---------------------+
| Id | ShippingDate        |
+----+---------------------+
| 3  | 2019-05-11 00:00:00 |
| 1  | 2019-04-21 00:00:00 |
| 5  | 2019-02-18 00:00:00 |
| 2  | 2019-01-01 00:00:00 |
| 4  | 2018-12-31 00:00:00 |
+----+---------------------+

ব্যাখ্যা: এখানে CASE এক্সপ্রেশন দুটি গ্রুপ বানাচ্ছে: ভবিষ্যতের তারিখ (CURDATE() বা তার পরে) এবং অতীতে তারিখ। ভবিষ্যতের গ্রুপে সবার জন্য একই মান (CURDATE()) এসাইন করা হয়েছে, তাই সেগুলো ShippingDate ASC দিয়ে সাজছে। অতীতের গ্রুপে.real তারিখ অনুযায়ী ডিসেন্ডিং সাজছে।

কারণ UNION কাজ করে না: UNION ডিফল্টভাবে ডুপ্লিকেট সরিয়ে দেয় এবং অর্ডার গ্যারান্টি দেয় না (ORDER BY ছাড়া)।

  1. MySQL-এ DISTINCT এবং ORDER BY MAX() দিয়ে আইডি অনুযায়ী সাজানো

  2. MySQL-এ নির্দিষ্ট ক্রমে (SET ORDER) সিলেক্ট করার পদ্ধতি

  3. MySQL-এ ORDER BY Amount=0, Amount দিয়ে শূন্য মানগুলো শেষে পাঠানো

  4. MySQL-এ UNION SELECT এবং IN ক্লজ একসাথে ব্যবহার