परिचय
MySQL में ORDER BY RAND() का उपयोग करके क्वेरी परिणामों को यादृच्छिक (रैंडम) क्रम में क्रमबद्ध किया जा सकता है। LIMIT के साथ संयोजित करके रैंडम नमूना (random sample) प्राप्त किया जा सकता है।
सिंटैक्स
SELECT * FROM table_name
WHERE column_name IN (value1, value2, ...)
ORDER BY RAND()
LIMIT limit_value;
उदाहरण: टेबल बनाना और डेटा डालना
mysql> CREATE TABLE DemoTable1559 (
-> EmployeeId INT,
-> EmployeeName VARCHAR(20),
-> EmployeeAge INT
-> );
Query OK, 0 rows affected (1.22 sec)
mysql> INSERT INTO DemoTable1559 VALUES(101, 'Bob', 28);
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO DemoTable1559 VALUES(102, 'Robert', 26);
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable1559 VALUES(103, 'Sam', 25);
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO DemoTable1559 VALUES(104, 'Mike', 29);
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO DemoTable1559 VALUES(105, 'John', 34);
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO DemoTable1559 VALUES(106, 'Carol', 31);
Query OK, 1 row affected (0.19 sec)
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable1559;
आउटपुट:
+------------+--------------+-------------+
| EmployeeId | EmployeeName | EmployeeAge |
+------------+--------------+-------------+
| 101 | Bob | 28 |
| 102 | Robert | 26 |
| 103 | Sam | 25 |
| 104 | Mike | 29 |
| 105 | John | 34 |
| 106 | Carol | 31 |
+------------+--------------+-------------+
6 rows in set (0.00 sec)
रैंडम क्रम में 3 पंक्तियां चुनने की क्वेरी
mysql> SELECT * FROM DemoTable1559
-> WHERE EmployeeId IN (101, 103, 106)
-> ORDER BY RAND() LIMIT 3;
परिणाम (उदाहरण - हर बार अलग होगा)
+------------+--------------+-------------+
| EmployeeId | EmployeeName | EmployeeAge |
+------------+--------------+-------------+
| 101 | Bob | 28 |
| 103 | Sam | 25 |
| 106 | Carol | 31 |
+------------+--------------+-------------+
3 rows in set (0.00 sec)
महत्वपूर्ण विचार
- प्रदर्शन:
ORDER BY RAND()बड़े टेबल पर धीमा होता है (फुल टेबल स्कैन + फाइलसॉर्ट) - बड़े टेबल के लिए विकल्प:
- ऑफसेट-आधारित:
LIMIT 1 OFFSET FLOOR(RAND() * (SELECT COUNT(*) FROM table)) - यादृच्छिक ID रेंज:
WHERE id >= (SELECT FLOOR(RAND() * (MAX(id) - MIN(id) + 1)) + MIN(id)) ORDER BY id LIMIT 1
- ऑफसेट-आधारित:
RAND()प्रत्येक पंक्ति के लिए एक यादृच्छिक फ्लोट (0-1) उत्पन्न करता है- निर्धारित परिणाम के लिए:
ORDER BY RAND(12345)(सीड मान)
उपयोग के मामले
- फीचर्ड कंटेंट रोटेशन
- A/B टेस्टिंग के लिए रैंडम नमूना
- क्विज़/परीक्षा में प्रश्न क्रम यादृच्छिक करना
छोटे-मध्यम टेबल के लिए ORDER BY RAND() सरल और प्रभावी है।