Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में RAND() और सबक्वेरी से रैंडम पंक्तियां चुनें फिर विशिष्ट कॉलम द्वारा क्रमबद्ध करें

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    |
+-------+-------+

चरण-दर-चरण व्याख्या

  1. आंतरिक क्वेरी: SELECT * FROM DemoTable1339 ORDER BY RAND() LIMIT 4 - पूरी टेबल को रैंडम क्रम में व्यवस्थित करके 4 पंक्तियां चुनता है
  2. बाहरी क्वेरी: चयनित 4 पंक्तियों को ORDER BY Name से वर्णानुक्रम में क्रमबद्ध करता है
  3. 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 वांछित अंतिम क्रम के लिए

दो-चरण दृष्टिकोण (रैंडम चयन → क्रमबद्ध) लचीलापन और शुद्धता दोनों देता है।

  1. MySQL में विशिष्ट कॉलम डेटा कैसे निर्यात करें? MySQL में विशिष्ट कॉलम डेटा कैसे निर्यात करें?

    MySQL में SELECT ... INTO OUTFILE का उपयोग करके आप किसी क्वेरी के परिणाम को सर्वर पर एक फ़ाइल में निर्यात कर सकते हैं। यह डेटा निर्यात, बैकअप, या अन्य सिस्टम के साथ एकीकरण के लिए उपयोगी है। सिंटैक्स SELECT yourColumnName FROM yourTableName INTO OUTFILE file_path; उदाहरण तालिका बनाना और डेटा डालना

  1. MySQL में विशिष्ट कॉलम नाम वाली टेबल कैसे खोजें MySQL में विशिष्ट कॉलम नाम वाली टेबल कैसे खोजें

    information_schema.columns टेबल को क्वेरी करके डेटाबेस में विशिष्ट कॉलम नाम वाली सभी टेबल खोजें। सिंटैक्स SELECT DISTINCT table_name FROM information_schema.columns WHERE column_name LIKE %yourSearchValue% AND table_schema = DATABASE(); उदाहरण: Client वाली कॉलम खोजना SELECT DISTINCT table_name FR

  1. - MySQL में GROUP BY DATE से विशिष्ट तारीख वाली पंक्तियां दिखाएं

    DATE() फ़ंक्शन से तारीख भाग के अनुसार समूहित करें डेटाइम कॉलम के केवल तारीख भाग के अनुसार पंक्तियों को समूहित करने के लिए GROUP BY DATE(कॉलम) का उपयोग करें। टेबल बनाएं और डेटा डालें: mysql> create table DemoTable1996 ( ShippingDate datetime, CustomerName varchar(20) ); Query OK, 0 rows affected (