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

MySQL में LIMIT के बाद अलग क्रम कैसे प्राप्त करें

आपको SELECT स्टेटमेंट के साथ सबक्वेरी का उपयोग करने की आवश्यकता है, एक आंतरिक के लिए और एक बाहरी के लिए। आंतरिक सेलेक्ट पंक्तियाँ लौटाएगा और बाहरी आरोही क्रम में ऑर्डर करेगा। सिंटैक्स इस प्रकार है:

SELECT * FROM ( 
    SELECT * FROM yourTableName ORDER BY yourColumnName1 DESC LIMIT 9 
) AS anyAliasName ORDER BY yourColumnName2;

उपरोक्त सिंटैक्स को समझने के लिए, आइए एक टेबल बनाते हैं। टेबल बनाने की क्वेरी इस प्रकार है:

mysql> create table OrderByAfterLimit 
-> ( 
-> Id int NOT NULL AUTO_INCREMENT, 
-> UserName varchar(20), 
-> UserAge int, 
-> PRIMARY KEY(Id) 
-> ); 
Query OK, 0 rows affected (0.69 sec)

अब आप insert कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड्स डाल सकते हैं। क्वेरी इस प्रकार है:

mysql> insert into OrderByAfterLimit(UserName, UserAge) values('John',23); 
Query OK, 1 row affected (0.24 sec) 
mysql> insert into OrderByAfterLimit(UserName, UserAge) values('Larry',21); 
Query OK, 1 row affected (0.36 sec) 
mysql> insert into OrderByAfterLimit(UserName, UserAge) values('Bob',26); 
Query OK, 1 row affected (0.19 sec) 
mysql> insert into OrderByAfterLimit(UserName, UserAge) values('James',22); 
Query OK, 1 row affected (0.18 sec) 
mysql> insert into OrderByAfterLimit(UserName, UserAge) values('Robert',28); 
Query OK, 1 row affected (0.20 sec) 
mysql> insert into OrderByAfterLimit(UserName, UserAge) values('Mike',29); 
Query OK, 1 row affected (0.19 sec) 
mysql> insert into OrderByAfterLimit(UserName, UserAge) values('Carol',24); 
Query OK, 1 row affected (0.13 sec) 
mysql> insert into OrderByAfterLimit(UserName, UserAge) values('David',20); 
Query OK, 1 row affected (0.23 sec) 
mysql> insert into OrderByAfterLimit(UserName, UserAge) values('Maxwell',30); 
Query OK, 1 row affected (0.46 sec)

select स्टेटमेंट का उपयोग करके टेबल से सभी रिकॉर्ड्स प्रदर्शित करें। क्वेरी इस प्रकार है:

mysql> select *from OrderByAfterLimit;

निम्नलिखित आउटपुट है:

+----+----------+---------+ 
| Id | UserName | UserAge | 
+----+----------+---------+ 
| 1 | John | 23 | 
| 2 | Larry | 21 | 
| 3 | Bob | 26 | 
| 4 | James | 22 | 
| 5 | Robert | 28 | 
| 6 | Mike | 29 | 
| 7 | Carol | 24 | 
| 8 | David | 20 | 
| 9 | Maxwell | 30 | 
+----+----------+---------+ 
9 rows in set (0.00 sec)

LIMIT के बाद ORDER BY की क्वेरी यहां है:

mysql> select *from 
-> ( 
-> select *from OrderByAfterLimit order by UserAge DESC LIMIT 9) AS tbl1 
-> order by UserName;

निम्नलिखित आउटपुट है:

+----+----------+---------+ 
| Id | UserName | UserAge | 
+----+----------+---------+ 
| 3 | Bob | 26 | 
| 7 | Carol | 24 | 
| 8 | David | 20 | 
| 4 | James | 22 | 
| 1 | John | 23 | 
| 2 | Larry | 21 | 
| 9 | Maxwell | 30 | 
| 6 | Mike | 29 | 
| 5 | Robert | 28 | 
+----+----------+---------+ 
9 rows in set (0.00 sec)
व्याख्या: आंतरिक क्वेरी UserAge के अनुसार अवरोही क्रम में शीर्ष 9 पंक्तियाँ चुनती है (यहां सभी 9 क्योंकि टेबल में केवल 9 पंक्तियाँ हैं)। बाहरी क्वेरी उन 9 पंक्तियों को UserName के अनुसार आरोही क्रम में पुनः क्रमबद्ध करती है। इसे "टॉप-N फिर क्रमबद्ध करें" पैटर्न के रूप में जाना जाता है।
  1. - MySQL में आरक्षित शब्द 'order' को टेबल नाम के रूप में उपयोग करने के लिए बैकटिक्स

    MySQL में ORDER एक आरक्षित शब्द (reserved word) है। इसे टेबल या कॉलम नाम के रूप में उपयोग करने के लिए बैकटिक्स (`) से घेरना आवश्यक है। समस्या CREATE TABLE order (StudentId INT); ERROR 1064: You have an error in your SQL syntax near order समाधान: बैकटिक्स का उपयोग CREATE TABLE `order` (StudentId

  1. - MySQL में न्यूमेरिक यूज़र-डिफ़ाइंड वेरिएबल के साथ ORDER BY कैसे करें?

    MySQL में डायनामिक कॉलम नाम के साथ ORDER BY करने के लिए, यूज़र-डिफ़ाइंड वेरिएबल और PREPARED STATEMENT का उपयोग करें। यह तब उपयोगी होता है जब कॉलम का नाम रनटाइम पर तय होता है। उदाहरण: वेरिएबल के साथ डायनामिक ORDER BY डेमो टेबल बनाएं: mysql> CREATE TABLE DemoTable1898 (Number INT); डेटा इन्सर्ट

  1. - MySQL में VARCHAR स्ट्रिंग से हाइफ़न के बाद की संख्याओं को कैसे हटाएं

    समाधान SUBSTRING_INDEX() फंक्शन का उपयोग करके हाइफ़न से पहले का भाग प्राप्त करें। उदाहरण टेबल बनाएं: INSERT INTO DemoTable2040 VALUES (John-232), (Carol-901), (David-987); अपडेट क्वेरी UPDATE DemoTable2040 SET StudentCode = SUBSTRING_INDEX(StudentCode, -, 1); परिणाम +-------------+ | StudentCod