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

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

MySQL-এ ডাইনামিকভাবে কলাম নাম বা সর্ট ক্রম নির্দিষ্ট করতে ইউজার-ডিফাইনড ভেরিয়েবল (@variable) এবং প্রিপেয়ার্ড স্টেটমেন্ট (PREPARE/EXECUTE) ব্যবহার করা যায়।

টেবিল ও ডেটা তৈরি

mysql> CREATE TABLE DemoTable1898 (Number INT);

mysql> INSERT INTO DemoTable1898 VALUES (10), (70), (30), (50), (40);

ডেটা যাচাই

mysql> SELECT * FROM DemoTable1898;
+--------+
| Number |
+--------+
|     10 |
|     70 |
|     30 |
|     50 |
|     40 |
+--------+

ডাইনামিক ORDER BY কোয়েরি

mysql> SET @limitValue := 1;                    -- ১ নম্বর কলাম (এখানে একমাত্র কলাম)
mysql> SET @query := CONCAT('SELECT * FROM DemoTable1898 ORDER BY ', @limitValue);
mysql> PREPARE stmt FROM @query;
mysql> EXECUTE stmt;

আউটপুট (সর্টেড):

+--------+
| Number |
+--------+
|     10 |
|     30 |
|     40 |
|     50 |
|     70 |
+--------+

পরিষ্কার করা

mysql> DEALLOCATE PREPARE stmt;

কখন ব্যবহার করবেন?

  • অ্যাপ্লিকেশন লেভেলে ইউজার ইনপুট অনুযায়ী সর্ট কলাম পরিবর্তন করতে চাইলে।
  • স্টোরড প্রসিডিউর বা ডাইনামিক SQL-এ।

সতর্কতা

  • SQL ইনজেকশন ঝুঁকি থাকে — ভেরিয়েবল ভ্যালু যাচাই/স্যানিটাইজ করুন।
  • MySQL 8.0+ এ ORDER BY CAST(@var AS UNSIGNED) ব্যবহার করা নিরাপদ।
  1. MySQL-এ GROUP BY ও ORDER BY FIELD একসাথে ব্যবহার করে কাস্টম সর্টিং

  2. MySQL-এ ব্যবহারকারী-নির্ধারিত ভেরিয়েবলে SELECT INTO ব্যবহার করা

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

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