RAND() से डायनामिक रैंडम कॉलम और सॉर्टिंग
MySQL में रैंडम ऑर्डरिंग के लिए एक वर्चुअल रैंडम कॉलम बनाएं और उसके अनुसार सॉर्ट करें।
उदाहरण
टेबल बनाएं:
mysql> CREATE TABLE DemoTable (
-> StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName VARCHAR(20)
-> );
डेटा इन्सर्ट करें:
mysql> INSERT INTO DemoTable(StudentName) VALUES('Larry'), ('Sam'), ('Mike'), ('Carol'), ('Robert'), ('Chris');
मूल क्रम:
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 1 | Larry | | 2 | Sam | | 3 | Mike | | 4 | Carol | | 5 | Robert | | 6 | Chris | +-----------+-------------+
रैंडम कॉलम बनाकर सॉर्ट करने की क्वेरी
mysql> SELECT * FROM (
-> SELECT StudentName, RAND() + 1 AS RandomRecord FROM DemoTable
-> ) AS tbl
-> ORDER BY RandomRecord DESC;
परिणाम (हर बार अलग):
+-------------+--------------------+ | StudentName | RandomRecord | +-------------+--------------------+ | Carol | 1.8973721451101566 | | Chris | 1.7821308670399065 | | Mike | 1.4640037673190271 | | Larry | 1.4134691557041081 | | Sam | 1.1408822407395414 | | Robert | 1.0948494543273461 | +-------------+--------------------+
व्याख्या:
RAND() + 1- 1.0 से 2.0 के बीच रैंडम फ्लोट उत्पन्न करता है- सबक्वेरी
tblमें यह नया कॉलमRandomRecordके रूप में जुड़ जाता है - बाहरी क्वेरी इस नए कॉलम के अनुसार
DESC(उच्च से निम्न) सॉर्ट करती है
सरल विकल्प
-- 1. प्राइमरी की रेंज में रैंडम SELECT * FROM table WHERE id >= (SELECT FLOOR(RAND() * (MAX(id) - MIN(id) + 1)) + MIN(id)) LIMIT 10; -- 2. OFFSET आधारित (कुल पंक्तियाँ ज्ञात हों) SELECT * FROM table LIMIT 10 OFFSET FLOOR(RAND() * (total_rows - 10));