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

Làm thế nào để chọn các hàng nếu những hàng đầu tiên được ngẫu nhiên hóa và những hàng còn lại được sắp xếp theo tiêu chí với MySQL?

Đối với điều này, bạn có thể sử dụng câu lệnh ORDER BY CASE. Hãy để chúng tôi tạo một bảng -

mysql> create table DemoTable1926
   (
   Position varchar(20),
   Number int
   );
Query OK, 0 rows affected (0.00 sec)

Chèn một số bản ghi vào bảng bằng lệnh chèn -

mysql> insert into DemoTable1926 values('Highest',50);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1926 values('Highest',30);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1926 values('Lowest',100);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1926 values('Lowest',120);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1926 values('Lowest',90);
Query OK, 1 row affected (0.00 sec)

Hiển thị tất cả các bản ghi từ bảng bằng câu lệnh select -

mysql> select * from DemoTable1926;

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

+----------+--------+
| Position | Number |
+----------+--------+
| Highest  |     50 |
| Highest  |     30 |
| Lowest   |    100 |
| Lowest   |    120 |
| Lowest   |     90 |
+----------+--------+
5 rows in set (0.00 sec)

Đây là truy vấn để chọn các hàng nếu các hàng ban đầu được ngẫu nhiên hóa và sắp xếp còn lại theo tiêu chí -

mysql> select * from DemoTable1926
   order by Position desc,case Position when 'Highest' then rand()
   else Number end asc;

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

+----------+--------+
| Position | Number |
+----------+--------+
| Lowest   |     90 |
| Lowest   |    100 |
| Lowest   |    120 |
| Highest  |     50 |
| Highest  |     30 |
+----------+--------+
5 rows in set (0.00 sec)