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

MySQL-এ টাইমস্ট্যাম্প DESC-এ সাজাতে '0000-00-00 00:00:00' কে প্রথমে রাখা


ORDER BY এক্সপ্রেশন দিয়ে শূন্য টাইমস্ট্যাম্পকে প্রথমে আনা

MySQL-এ TIMESTAMP কলাম ডিফল্ট ভ্যালু '0000-00-00 00:00:00' হতে পারে। DESC সাজানোর সময় এই শূন্য মানগুলো সর্বশেষে চলে যায়। তাদের প্রথমে রাখতে বুলিয়ান এক্সপ্রেশন ব্যবহার করা হয়।

টেবিল ও ডেটা

mysql> CREATE TABLE DemoTable (`timestamp` TIMESTAMP);
mysql> INSERT INTO DemoTable VALUES(NOW()), ('00:00:00'), ('2018-01-10 12:34:45'), ('2019-12-31 10:50:45');

সাধারণ ORDER BY DESC (শূন্য শেষে)

+---------------------+
| timestamp           |
+---------------------+
| 2019-12-31 10:50:45 |
| 2019-08-17 06:17:12 |
| 2018-01-10 12:34:45 |
| 0000-00-00 00:00:00 |
+---------------------+

শূন্য প্রথমে রাখার কোয়েরি

mysql> SELECT * FROM DemoTable 
ORDER BY (`timestamp` = 0) DESC, `timestamp` DESC;
+---------------------+
| timestamp           |
+---------------------+
| 0000-00-00 00:00:00 |
| 2019-12-31 10:50:45 |
| 2019-08-17 06:17:12 |
| 2018-01-10 12:34:45 |
+---------------------+

ব্যাখ্যা

  • (`timestamp` = 0) — শূন্য টাইমস্ট্যাম্পের জন্য TRUE (1), অন্যদের FALSE (0) রিটার্ন করে।
  • DESC — TRUE (1) কে FALSE (0) থেকে আগে আনে, অর্থাৎ শূন্য মানগুলো প্রথমে আসে।
  • দ্বিতীয় ORDER BY `timestamp` DESC — বাকি গুলো সাধারণ DESC-এ সাজায়।

নোট

MySQL-এ TIMESTAMP কলামে '0000-00-00 00:00:00' হলো "zero" ভ্যালু, যা NULL নয়। NO_ZERO_DATE SQL মোড অন থাকলে এই ভ্যালু ইনসার্ট হয় না।

  1. MySQL-এ ORDER BY DESC LIMIT 3 দিয়ে প্রথম ৩ রেকর্ড দেখানো

  2. MySQL-এ ORDER BY CASE WHEN দিয়ে নির্দিষ্ট রেকর্ডকে (John) শীর্ষে আনা

  3. MySQL-এ SUBSTRING_INDEX() দিয়ে কমা-সেপারেটেড সংখ্যার সেটের প্রথম সংখ্যা দিয়ে ORDER BY করা

  4. MySQL কোয়ারি: মডুলাস (MODULUS) ফলাফলের ভিত্তিতে ORDER BY করা