Computer >> Máy Tính >  >> Lập trình >> MySQL

Có thể chia các bản ghi theo cả thứ tự tăng dần và giảm dần trong MySQL và hiển thị chúng theo cách khác không?

Có, bạn có thể thực hiện điều này trong MySQL bằng cách lấy giá trị trung bình trước. Đầu tiên chúng ta hãy tạo một bảng:

mysql> create table DemoTable
(
   UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY
);
Query OK, 0 rows affected (0.65 sec)

Sau đây là truy vấn để chèn một số bản ghi trong bảng bằng cách sử dụng lệnh insert:

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)

Sau đây là truy vấn để hiển thị các bản ghi từ bảng bằng lệnh select:

mysql> select *from DemoTable;

Điều này sẽ tạo ra kết quả sau

+--------+
| UserId |
+--------+
|      1 |
|      2 |
|      3 |
|      4 |
|      5 |
|      6 |
|      7 |
|      8 |
|      9 |
|     10 |
+--------+
10 rows in set (0.00 sec)

Đây là truy vấn để lấy giá trị giữa đầu tiên:

mysql> set @middleValue=(select max(UserId) from DemoTable)/2;
Query OK, 0 rows affected (0.01 sec)

Bây giờ, chúng ta hãy lấy giá trị thứ tự tăng dần và giảm dần theo cách khác:

mysql> select *from DemoTable ORDER BY (IF(UserId <@middleValue,@middleValue*2-
UserId,UserId-1)) DESC,UserId ASC;

Điều này sẽ tạo ra kết quả sau

+--------+
| UserId |
+--------+
|      1 |
|      10|
|      2 |
|      9 |
|      3 |
|      8 |
|      4 |
|      7 |
|      6 |
|      5 |
+--------+
10 rows in set (0.00 sec)