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)ব্যবহার করা নিরাপদ।