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

MySQL-এ আন্ডারস্কোর (_) সম্বলিত স্ট্রিং ORDER BY করা (LIKE প্যাটার্ন)


ORDER BY CASE/BOOLEAN দিয়ে নির্দিষ্ট প্যাটার্নের রোকে প্রথমে আনা

MySQL-এ আন্ডারস্কোর (_) সম্বলিত স্ট্রিং (যেমন 'John_Smith') কে সাজানোর সময় নির্দিষ্ট প্যাটার্ন (যেমন 'John_%') দিয়ে ম্যাচ করা রোগুলোকে প্রথমে আনা যায়।

টেবিল ও ডেটা

mysql> CREATE TABLE DemoTable (Name VARCHAR(100));
mysql> INSERT INTO DemoTable VALUES('John_Smith'), ('Chris Brown'), ('John_Doe'), ('David Miller'), ('Carol Taylor');

সাধারণ সাজানো (ডিফল্ট)

+--------------+
| Name         |
+--------------+
| John_Smith   |
| Chris Brown  |
| John_Doe     |
| David Miller |
| Carol Taylor |
+--------------+

ORDER BY (Name LIKE 'John_%') DESC

mysql> SELECT * FROM DemoTable ORDER BY (Name LIKE 'John_%') DESC, RAND();
+--------------+
| Name         |
+--------------+
| John_Doe     |
| John_Smith   |
| Carol Taylor |
| David Miller |
| Chris Brown  |
+--------------+

ব্যাখ্যা

  • (Name LIKE 'John_%') — 'John_' দিয়ে শুরু হলে TRUE (1), নহলে FALSE (0)।
  • DESC — TRUE (1) কে FALSE (0) থেকে আগে আনে।
  • RAND() — একই গ্রুপের মধ্যে র‍্যান্ডম সাজানো (দ্বিতীয় সাজানোর ক্রাইটেরিয়া)।

বিকল্প: CASE WHEN

ORDER BY CASE WHEN Name LIKE 'John_%' THEN 0 ELSE 1 END, Name;

এটি আরও পঠনীয় এবং একাধিক প্রায়োরিটি লেভেল ডিফাইন করতে পারা যায়।

  1. MySQL-এ রিজার্ভড ওয়ার্ড 'order' টেবিল নাম হিসেবে ব্যবহার করুন (ব্যাকটিকস)

  2. MySQL-এ GROUP_CONCAT() এবং ORDER BY ব্যবহার করে এগরিগেট ফাংশনে সর্টিং প্রয়োগ করুন

  3. MySQL-এ ইউজার-ডিফাইনড ভেরিয়েবল দিয়ে ORDER BY করা

  4. MySQL-এ একাধিক LIKE অপারেটর ORDER BY-এ ব্যবহার করা