MySQL-এ রেকর্ডগুলো র্যান্ডম ক্রমে পাওয়ার জন্য ORDER BY RAND() ব্যবহার করা হয়। এটি নমুনা বাছাই বা কুইজ অ্যাপ্লিকেশনে কাজে লাগে।
টেবিল তৈরি ও ডেটা ইনসার্ট
mysql> CREATE TABLE DemoTable792 (Name VARCHAR(100), Subject VARCHAR(100)); Query OK, 0 rows affected (0.66 sec)
mysql> INSERT INTO DemoTable792 VALUES ('Chris', 'MySQL');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO DemoTable792 VALUES ('David', 'MySQL');
Query OK, 1 row affected (0.22 sec)
mysql> INSERT INTO DemoTable792 VALUES ('Robert', 'MongoDB');
Query OK, 1 row affected (0.20 sec)
mysql> INSERT INTO DemoTable792 VALUES ('Carol', 'MongoDB');
Query OK, 1 row affected (0.18 sec)
সকল রেকর্ড
mysql> SELECT * FROM DemoTable792;
আউটপুট:
+--------+---------+ | Name | Subject | +--------+---------+ | Chris | MySQL | | David | MySQL | | Robert | MongoDB | | Carol | MongoDB | +--------+---------+ 4 rows in set (0.00 sec)
RAND() দিয়ে র্যান্ডমলি শাফল
mysql> SELECT * FROM DemoTable792 ORDER BY RAND();
ফলাফল (প্রতিবার ভিন্ন হবে):
+--------+---------+ | Name | Subject | +--------+---------+ | Chris | MySQL | | Robert | MongoDB | | David | MySQL | | Carol | MongoDB | +--------+---------+ 4 rows in set (0.00 sec)
পারফরম্যান্স সতর্কতা
ORDER BY RAND()বড় টেবিলে খুব ধীর (ফুল টেবিল স্ক্যান + সর্ট)।- বড় টেবিলে ব্যবহার করবেন না। বিকল্প:
বিকল্প পদ্ধতি (দ্রুত)
-- ১. র্যান্ডম অফসেট (একটি রো জন্য) SELECT * FROM table WHERE id >= (SELECT FLOOR(RAND() * (SELECT MAX(id) FROM table))) ORDER BY id LIMIT 1; -- ২. একাধিক র্যান্ডম রো (WHERE RAND() < probability) SELECT * FROM table WHERE RAND() < 0.01 LIMIT 10;
নোট: ছোট টেবিলে ORDER BY RAND() কোনো সমস্যা নেই।