MySQL में रैंडम पंक्तियां चुनने के बाद उन्हें किसी विशिष्ट कॉलम द्वारा क्रमबद्ध करने के लिए सबक्वेरी (व्युत्पन्न टेबल) का उपयोग करें। पहले ORDER BY RAND() से रैंडम पंक्तियां चुनें, फिर बाहरी क्वेरी में वांछित कॉलम द्वारा क्रमबद्ध करें।
सिंटैक्स
SELECT * FROM (
SELECT * FROM table_name ORDER BY RAND() LIMIT n
) AS random_subset
ORDER BY specific_column;
व्यावहारिक उदाहरण
टेबल बनाएं:
mysql> CREATE TABLE DemoTable1339 (Name VARCHAR(30), Score INT);
डेटा डालें:
mysql> INSERT INTO DemoTable1339 VALUES('Chris', 56);
mysql> INSERT INTO DemoTable1339 VALUES('Bob', 46);
mysql> INSERT INTO DemoTable1339 VALUES('Adam', 78);
mysql> INSERT INTO DemoTable1339 VALUES('John', 90);
mysql> INSERT INTO DemoTable1339 VALUES('Carol', 98);
डेटा देखें:
mysql> SELECT * FROM DemoTable1339;
+-------+-------+ | Name | Score | +-------+-------+ | Chris | 56 | | Bob | 46 | | Adam | 78 | | John | 90 | | Carol | 98 | +-------+-------+
रैंडम 4 पंक्तियां चुनें, फिर Name द्वारा क्रमबद्ध करें
mysql> SELECT * FROM (
-> SELECT * FROM DemoTable1339 ORDER BY RAND() LIMIT 4
-> ) tbl ORDER BY Name;
परिणाम (उदाहरण - रैंडम चयन के कारण भिन्न हो सकता है)
+-------+-------+ | Name | Score | +-------+-------+ | Adam | 78 | | Bob | 46 | | Carol | 98 | | Chris | 56 | +-------+-------+
चरण-दर-चरण व्याख्या
- आंतरिक क्वेरी:
SELECT * FROM DemoTable1339 ORDER BY RAND() LIMIT 4- पूरी टेबल को रैंडम क्रम में व्यवस्थित करके 4 पंक्तियां चुनता है - बाहरी क्वेरी: चयनित 4 पंक्तियों को
ORDER BY Nameसे वर्णानुक्रम में क्रमबद्ध करता है tblसबक्वेरी के लिए आवश्यक एलियास है
RAND() प्रदर्शन चेतावनी
ORDER BY RAND()पूरी टेबल को स्कैन करता है और फाइलसॉर्ट करता है - **बड़े टेबल पर धीमा**- 10,000+ पंक्तियों पर ध्यान देने योग्य विलंब हो सकता है
- 100,000+ पंक्तियों पर बहुत धीमा
बड़े टेबल के लिए कुशल विकल्प
विकल्प 1: प्राथमिक कुंजी रेंज पर रैंडम (अनुमानित)
SELECT * FROM DemoTable1339 WHERE Id >= (SELECT FLOOR(RAND() * (MAX(Id) - MIN(Id) + 1)) + MIN(Id) FROM DemoTable1339) ORDER BY Name LIMIT 4;
विकल्प 2: UUID/हैश कॉलम पर इंडेक्स
ALTER TABLE DemoTable1339 ADD COLUMN rand_sort DOUBLE AS (RAND()) STORED; CREATE INDEX idx_rand_sort ON DemoTable1339(rand_sort); SELECT * FROM DemoTable1339 ORDER BY rand_sort LIMIT 4;
विकल्प 3: एप्लिकेशन लेयर में रैंडम ID चुनें
-- एप्लिकेशन में ids = [1, 5, 12, 100, ...] -- सभी ID प्राप्त करें random_ids = random.sample(ids, 4) -- फिर SQL में SELECT * FROM DemoTable1339 WHERE Id IN (?, ?, ?, ?) ORDER BY Name;
उपयोग के मामले
- फीचर्ड/स्पॉटलाइट आइटम (रैंडम चयन, वर्णानुक्रम प्रदर्शन)
- A/B टेस्टिंग: रैंडम उपयोगकर्ता समूह, फिर क्रमबद्ध
- क्विज/फ्लैशकार्ड: रैंडम प्रश्न, विषय द्वारा क्रमबद्ध
- सैंपलिंग: सांख्यिकीय नमूना, फिर विश्लेषण क्रम
सारांश
- छोटे टेबल (< 1000 पंक्तियां):
ORDER BY RAND() LIMIT nसरल और ठीक है - मध्यम टेबल: सबक्वेरी पैटर्न काम करता है
- बड़े टेबल: उपरोक्त विकल्पों में से एक उपयोग करें
- हमेशा बाहरी
ORDER BYवांछित अंतिम क्रम के लिए
दो-चरण दृष्टिकोण (रैंडम चयन → क्रमबद्ध) लचीलापन और शुद्धता दोनों देता है।