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

MySQL में विशिष्ट LIMIT के बाद क्रमबद्ध रिकॉर्ड कैसे प्राप्त करें?

MySQL में उपक्वेरी का उपयोग करके OFFSET के बाद क्रमबद्ध रिकॉर्ड प्राप्त करना

किसी ऑफसेट (OFFSET) के बाद की पंक्तियों को एक विशिष्ट क्रम में प्राप्त करने के लिए, उपक्वेरी (सबक्वेरी) में पहले ORDER BY और LIMIT लागू करें, फिर बाहरी क्वेरी में पुनः क्रमबद्ध करें।

उदाहरण के साथ पूर्ण कार्यान्वयन

टेबल बनाना

mysql> CREATE TABLE DemoTable618 (
    StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentFirstName VARCHAR(100)
);

रिकॉर्ड डालना

mysql> INSERT INTO DemoTable618(StudentFirstName) VALUES
('David'), ('Chris'), ('Robert'), ('Sam'), ('Mike'), ('Carol'), ('Bob'), ('John');

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

mysql> SELECT * FROM DemoTable618;

आउटपुट:

+-----------+------------------+
| StudentId | StudentFirstName |
+-----------+------------------+
| 1         | David            |
| 2         | Chris            |
| 3         | Robert           |
| 4         | Sam              |
| 5         | Mike             |
| 6         | Carol            |
| 7         | Bob              |
| 8         | John             |
+-----------+------------------+
8 rows in set (0.00 sec)

OFFSET 5 के बाद 4 पंक्तियाँ, अवरोही क्रम में

mysql> SELECT * FROM (
    SELECT StudentId, StudentFirstName 
    FROM DemoTable618 
    WHERE StudentId >= 5 
    ORDER BY StudentId 
    LIMIT 4
) tbl 
ORDER BY tbl.StudentId DESC;

आउटपुट:

+-----------+------------------+
| StudentId | StudentFirstName |
+-----------+------------------+
| 8         | John             |
| 7         | Bob              |
| 6         | Carol            |
| 5         | Mike             |
+-----------+------------------+
4 rows in set (0.00 sec)

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

  1. WHERE StudentId >= 5: ID 5 से शुरू होने वाली पंक्तियाँ (5,6,7,8)
  2. ORDER BY StudentId: आरोही क्रम (5,6,7,8)
  3. LIMIT 4: ये 4 पंक्तियाँ चुनता है
  4. बाहरी ORDER BY DESC: परिणाम को उलट देता है (8,7,6,5)

सरल विकल्प: OFFSET और LIMIT

-- ID 5 से शुरू करके 4 पंक्तियाँ (OFFSET 4 = पहले 4 छोड़ें)
SELECT * FROM DemoTable618 
WHERE StudentId >= 5 
ORDER BY StudentId DESC 
LIMIT 4;

यह समान परिणाम देता है लेकिन अधिक सरल है। उपक्वेरी दृष्टिकोण तब उपयोगी होता है जब:

  • आंतरिक और बाहरी क्रम अलग-अलग हों
  • जटिल फ़िल्टरिंग के बाद क्रमबद्ध करना हो
  • पेजिनेशन में पृष्ठ उलटना हो

पेजिनेशन पैटर्न

-- पृष्ठ 1 (पहले 10)
SELECT * FROM posts ORDER BY created_at DESC LIMIT 10 OFFSET 0;

-- पृष्ठ 2 (अगले 10)
SELECT * FROM posts ORDER BY created_at DESC LIMIT 10 OFFSET 10;

-- सामान्य सूत्र: LIMIT page_size OFFSET (page_num - 1) * page_size

बड़े ऑफसेट के लिए अनुकूलन

बड़े OFFSET पर प्रदर्शन गिरता है। बेहतर: "सीक मेथड" (keyset pagination):

SELECT * FROM posts 
WHERE created_at < '2024-01-15 10:00:00'  -- अंतिम देखी गई तारीख
ORDER BY created_at DESC 
LIMIT 10;
  1. - MySQL क्वेरी में UNIX_TIMESTAMP के साथ अलग फॉर्मेट में डेट का उपयोग करके विशिष्ट डेट के बाद के रिकॉर्ड प्राप्त करें?

    इसके लिए आप STR_TO_DATE() का उपयोग कर सकते हैं, क्योंकि हमारे पास निम्न फॉर्मेट में डेट रिकॉर्ड हैं: 21/11/2019। आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable1808 ( AdmissionDate varchar(20) ); Query OK, 0 rows affected (0.00 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड

  1. - MySQL में MONTH() और YEAR() से विशिष्ट माह-वर्ष के रिकॉर्ड प्राप्त करें

    डेट कॉलम से माह और वर्ष निकालकर फ़िल्टर करने के लिए MySQL के MONTH() और YEAR() फ़ंक्शन का उपयोग करें। टेबल बनाएं mysql> CREATE TABLE DemoTable1846 ( PurchaseDate DATE ); डेटा डालें mysql> INSERT INTO DemoTable1846 VALUES(2019-01-10); mysql> INSERT INTO DemoTable1846 VALUES(2019-12-24)

  1. - MySQL REGEXP: विशिष्ट संख्या से शुरू होने वाले स्ट्रिंग+नंबर रिकॉर्ड प्राप्त करें

    REGEXP पैटर्न Select yourColumnName1, yourColumnName2 from yourTableName where yourColumnName2 REGEXP ^yourStringValue[yourNumericValue]; उदाहरण: John से शुरू और फिर 5 या 6 insert into demo45(value) values(John500), (John1500), (John5500), (John6500), (John8600); क्वेरी: ^John[56] select id,val