MySQL में ग्रुपिंग के साथ रैंडम ऑर्डरिंग
MySQL में जब आप किसी कॉलम के आधार पर ग्रुप बनाते हैं और फिर उन ग्रुप्स को रैंडम ऑर्डर में दिखाना चाहते हैं, तो इसके लिए एक सबक्वेरी के साथ RAND() फंक्शन का उपयोग किया जाता है।
उदाहरण के लिए टेबल बनाना
CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Value CHAR(1)
);
सैंपल डेटा इन्सर्ट करना
INSERT INTO DemoTable(Value) VALUES('X');
INSERT INTO DemoTable(Value) VALUES('Y');
INSERT INTO DemoTable(Value) VALUES('X');
INSERT INTO DemoTable(Value) VALUES('X');
INSERT INTO DemoTable(Value) VALUES('Y');
INSERT INTO DemoTable(Value) VALUES('Z');
INSERT INTO DemoTable(Value) VALUES('Z');
मौजूदा डेटा देखना
SELECT * FROM DemoTable;
आउटपुट:
+----+-------+ | Id | Value | +----+-------+ | 1 | X | | 2 | Y | | 3 | X | | 4 | X | | 5 | Y | | 6 | Z | | 7 | Z | +----+-------+
केस 1: ग्रुप करके रैंडम ऑर्डर में क्वेरी
SELECT DemoTable.*
FROM DemoTable
JOIN (
SELECT Value, RAND() AS `random_Value`
FROM DemoTable
GROUP BY Value
) tbl2 ON DemoTable.Value = tbl2.Value
ORDER BY tbl2.`random_Value`;
संभावित आउटपुट (हर बार अलग होगा):
+----+-------+ | Id | Value | +----+-------+ | 6 | Z | | 7 | Z | | 1 | X | | 3 | X | | 4 | X | | 2 | Y | | 5 | Y | +----+-------+
केस 2: वही क्वेरी फिर से चलाने पर अलग रिजल्ट
चूंकि RAND() हर बार नया रैंडम मान देता है, इसलिए ग्रुप्स का क्रम हर बार बदल जाएगा:
+----+-------+ | Id | Value | +----+-------+ | 2 | Y | | 5 | Y | | 6 | Z | | 7 | Z | | 1 | X | | 3 | X | | 4 | X | +----+-------+
व्याख्या
- सबक्वेरी हर यूनिक
Valueके लिए एक रैंडम नंबर जनरेट करती है - मुख्य क्वेरी इस रैंडम नंबर के आधार पर ऑर्डर करती है
- ग्रुप के अंदर के रिकॉर्ड्स अपने मूल क्रम में रहते हैं
नोट: बड़े डेटासेट के लिए यह तरीका धीमा हो सकता है। बेहतर परफॉरमेंस के लिए इंडेक्सिंग पर विचार करें।