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

MySQL में RAND() का उपयोग करके यादृच्छिक पंक्ति या एकाधिक यादृच्छिक पंक्तियाँ प्राप्त करना

समाधान: ORDER BY RAND() LIMIT N

टेबल से यादृच्छिक पंक्तियाँ प्राप्त करने के लिए ORDER BY RAND() के साथ LIMIT का उपयोग करें।

सिंटैक्स

SELECT * FROM yourTableName 
ORDER BY RAND() 
LIMIT yourIntegerNumber;

व्यावहारिक उदाहरण

टेबल बनाना और 13 रिकॉर्ड डालना

mysql> CREATE TABLE gettingRandomRow (
    -> CustomerId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> CustomerName VARCHAR(100)
    -> );

mysql> INSERT INTO gettingRandomRow(CustomerName) VALUES
    -> ('Chris'), ('Robert'), ('Ramit'), ('James'), ('Jace'),
    -> ('Mike'), ('Sam'), ('Bob'), ('Carol'), ('David'),
    -> ('Maxwell'), ('Larry'), ('John');

केस 1: 1 यादृच्छिक पंक्ति

mysql> SELECT * FROM gettingRandomRow ORDER BY RAND() LIMIT 1;
+------------+--------------+
| CustomerId | CustomerName |
+------------+--------------+
| 13         | John         |
+------------+--------------+

केस 2: 2 यादृच्छिक पंक्तियाँ (पहला रन)

mysql> SELECT * FROM gettingRandomRow ORDER BY RAND() LIMIT 2;
+------------+--------------+
| CustomerId | CustomerName |
+------------+--------------+
| 2          | Robert       |
| 3          | Ramit        |
+------------+--------------+

केस 3: 2 यादृच्छिक पंक्तियाँ (दूसरा रन - अलग परिणाम)

mysql> SELECT * FROM gettingRandomRow ORDER BY RAND() LIMIT 2;
+------------+--------------+
| CustomerId | CustomerName |
+------------+--------------+
| 4          | James        |
| 9          | Carol        |
+------------+--------------+

⚠️ प्रदर्शन चेतावनी: बड़े टेबल पर धीमा

ORDER BY RAND() पूर्ण टेबल स्कैन और फाइलसॉर्ट करता है।

  • 10,000+ पंक्तियों पर ध्यान देने योग्य धीमा
  • 100,000+ पंक्तियों पर बहुत धीमा
  • इंडेक्स का उपयोग नहीं कर सकता

बड़े टेबल के लिए बेहतर विकल्प

विधि 1: MAX(ID) के साथ रैंडम ऑफसेट (लगातार ID के लिए)

SELECT * FROM yourTable 
WHERE id >= (SELECT FLOOR(RAND() * (SELECT MAX(id) FROM yourTable)))
ORDER BY id LIMIT 1;

विधि 2: दो क्वेरी (काउंट फिर ऑफसेट)

SELECT COUNT(*) INTO @total FROM yourTable;
SET @offset = FLOOR(RAND() * @total);
PREPARE stmt FROM 'SELECT * FROM yourTable LIMIT ?, 1';
EXECUTE stmt USING @offset;

विधि 3: रैंडम कॉलम जोड़ना (MySQL 8.0+)

ALTER TABLE yourTable ADD COLUMN rand_sort DOUBLE AS (RAND()) STORED;
CREATE INDEX idx_rand_sort ON yourTable(rand_sort);

-- फिर तेज़ यादृच्छिक चयन
SELECT * FROM yourTable ORDER BY rand_sort LIMIT 10;

नमूना तालिका: विधि तुलना

विधिटेबल आकारगतिसच्ची यादृच्छिकता
ORDER BY RAND()छोटा (<10K)तेज़हाँ
MAX(ID) ऑफसेटबड़ातेज़लगभग (ID गैप के कारण)
काउंट + ऑफसेटबड़ामध्यमहाँ
रैंडम कॉलम इंडेक्सबहुत बड़ाबहुत तेज़हाँ
  1. - MySQL में कई पंक्तियाँ प्रभावी ढंग से चुनना

    इंडेक्स और IN() क्लॉज से कुशल पंक्ति चयन प्राइमरी की या इंडेक्स पर IN() क्लॉज का उपयोग करके कई विशिष्ट आईडी की पंक्तियाँ एक क्वेरी में कुशलता से प्राप्त करें। तालिका और इंडेक्स CREATE INDEX id_index ON DemoTable1501(Id); डेटा डालना (220, www.gmail.com), (350, www.youtube.com); कुशल चयन क्वेरी

  1. - MySQL में क्वेरी परिणामों को रैंडम क्रम में ऑर्डर करना और रैंडम पंक्तियां चुनना

    परिचय MySQL में ORDER BY RAND() का उपयोग करके क्वेरी परिणामों को यादृच्छिक (रैंडम) क्रम में क्रमबद्ध किया जा सकता है। LIMIT के साथ संयोजित करके रैंडम नमूना (random sample) प्राप्त किया जा सकता है। सिंटैक्स SELECT * FROM table_name WHERE column_name IN (value1, value2, ...) ORDER BY RAND() LIMIT lim

  1. - MySQL में विशिष्ट पंक्ति प्राप्त करना

    WHERE, ORDER BY और LIMIT से विशिष्ट पंक्ति चुनें टेबल बनाएं और डेटा डालें: mysql> create table DemoTable1972 ( Section char(1), StudentName varchar(20) ); Query OK, 0 rows affected (0.00 sec) mysql> insert into DemoTable1972 values(D,Chris); ... क्वेरी: C से बड़े सेक्शन को क्रमबद्ध करके पहले 2