![Trending Articles on Technical and Non Technical topics](/images/trending_categories.jpeg)
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
Physics
Chemistry
Biology
Mathematics
English
Economics
Psychology
Social Studies
Fashion Studies
Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Is it possible to divide records in both ascending and descending order in MySQL and display them alternatively?
Yes, you can perform this in MySQL by first getting the middle value. Let us first create a table:
mysql> create table DemoTable ( UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY ); Query OK, 0 rows affected (0.65 sec)
Following is the query to insert some records in the table using insert command:
mysql> insert into DemoTable values(); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.08 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.07 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.06 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.10 sec)
Following is the query to display records from the table using select command:
mysql> select *from DemoTable;
This will produce the following output
+--------+ | UserId | +--------+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | +--------+ 10 rows in set (0.00 sec)
Here is the query to get the middle value first:
mysql> set @middleValue=(select max(UserId) from DemoTable)/2; Query OK, 0 rows affected (0.01 sec)
Now, let us get the ascending and descending order value alternatively:
mysql> select *from DemoTable ORDER BY (IF(UserId <@middleValue,@middleValue*2- UserId,UserId-1)) DESC,UserId ASC;
This will produce the following output
+--------+ | UserId | +--------+ | 1 | | 10| | 2 | | 9 | | 3 | | 8 | | 4 | | 7 | | 6 | | 5 | +--------+ 10 rows in set (0.00 sec)
Advertisements