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

MySQL में अंतिम 20 रिकॉर्ड्स से 5 रैंडम रिकॉर्ड्स प्राप्त करना

सबक्वेरी के साथ RAND() और LIMIT का उपयोग

अंतिम N रिकॉर्ड्स से रैंडम रिकॉर्ड्स प्राप्त करने के लिए सबक्वेरी में ORDER BY ... DESC LIMIT का उपयोग करें, फिर बाहरी क्वेरी में ORDER BY RAND() LIMIT लागू करें।

उदाहरण: टेबल बनाना और डेटा इन्सर्ट करना

mysql> CREATE TABLE DemoTable773 (StudentId INT);
Query OK, 0 rows affected (0.59 sec)

23 रिकॉर्ड्स इन्सर्ट करना

mysql> INSERT INTO DemoTable773 VALUES(100),(200),(300),(400),(500),
    (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),
    (90),(91),(92),(93),(94),(95),(96),(97);
Query OK, 23 rows affected (...)

सभी रिकॉर्ड्स देखना

mysql> SELECT * FROM DemoTable773;
+-----------+
| StudentId |
+-----------+
|       100 |
|       200 |
|       300 |
|       400 |
|       500 |
|         1 |
|         2 |
|         3 |
|         4 |
|         5 |
|         6 |
|         7 |
|         8 |
|         9 |
|        10 |
|        90 |
|        91 |
|        92 |
|        93 |
|        94 |
|        95 |
|        96 |
|        97 |
+-----------+
23 rows in set (0.00 sec)

अंतिम 20 रिकॉर्ड्स से 5 रैंडम रिकॉर्ड्स की क्वेरी

mysql> SELECT * FROM (
    SELECT * FROM DemoTable773 ORDER BY StudentId DESC LIMIT 20
) AS RANDOM_OUTPUT ORDER BY RAND() LIMIT 5;

संभावित आउटपुट (रैंडम)

+-----------+
| StudentId |
+-----------+
|        95 |
|         4 |
|        10 |
|         7 |
|       300 |
+-----------+
5 rows in set (0.51 sec)

क्वेरी व्याख्या

  1. आंतरिक क्वेरी: ORDER BY StudentId DESC LIMIT 20 - नवीनतम 20 रिकॉर्ड्स चुनता है (यह मानकर कि उच्च ID नए रिकॉर्ड्स हैं)
  2. बाहरी क्वेरी: ORDER BY RAND() LIMIT 5 - उन 20 रिकॉर्ड्स को रैंडम क्रम में व्यवस्थित करके 5 चुनता है
  3. एलियास: AS RANDOM_OUTPUT - सबक्वेरी के लिए आवश्यक एलियास

महत्वपूर्ण विचार

  • प्रदर्शन: बड़े टेबल्स पर ORDER BY RAND() धीमा हो सकता है
  • बेहतर विकल्प: बड़े डेटासेट्स के लिए, एप्लिकेशन लेयर पर रैंडम सैंपलिंग करें या TABLESAMPLE (MySQL 8.0+) का उपयोग करें
  • क्रम निर्धारण: "अंतिम" रिकॉर्ड्स निर्धारित करने के लिए एक टाइमस्टैम्प या ऑटो-इन्क्रीमेंट कॉलम का उपयोग करें

अल्टरनेटिव: टाइमस्टैम्प आधारित

SELECT * FROM (
    SELECT * FROM DemoTable773 ORDER BY CreatedAt DESC LIMIT 20
) AS recent ORDER BY RAND() LIMIT 5;
  1. - MySQL में FORMAT() का उपयोग करके मुद्रा रिकॉर्ड कैसे सेट करें?

    MySQL में FORMAT() फ़ंक्शन का उपयोग करके संख्याओं को मुद्रा फॉर्मेट (हजारों विभाजक, निश्चित दशमलव) में प्रदर्शित किया जा सकता है। सिंटैक्स CONCAT(CURRENCY_SYMBOL , FORMAT(amount, decimal_places)) उदाहरण तालिका बनाएं: mysql> CREATE TABLE DemoTable (Amount DECIMAL(15,4)); mysql> INSERT INTO De

  1. - महीनों की एक श्रृंखला से रिकॉर्ड प्राप्त करने का MySQL क्वेरी?

    आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable1795 ( Name varchar(20), DueDate date ); Query OK, 0 rows affected (0.00 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into DemoTable1795 values(John,2018-07-21); Query OK, 1 row affected (0.00 sec)

  1. - MySQL में IN() क्लॉज़ के साथ एक क्वेरी में रिकॉर्ड कैसे डिलीट करें?

    MySQL में एक ही क्वेरी में एकाधिक विशिष्ट रिकॉर्ड डिलीट करने के लिए, DELETE स्टेटमेंट के साथ IN() ऑपरेटर का उपयोग करें। यह एकाधिक DELETE स्टेटमेंट चलाने से अधिक कुशल और पठनीय है। उदाहरण: विशिष्ट StudentId वाले रिकॉर्ड डिलीट करना डेमो टेबल बनाएं: mysql> CREATE TABLE DemoTable1922 ( StudentI