Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Lấy hàng ngẫu nhiên MySQL rồi sắp xếp theo cột cụ thể

Kết hợp ORDER BY RAND() (random) với truy vấn con và sắp xếp lại theo cột mong muốn.

Ví dụ minh họa

Tạo bảng:

mysql> CREATE TABLE DemoTable1339 (Name VARCHAR(30), Score INT);

Chèn dữ liệu:

mysql> INSERT INTO DemoTable1339 VALUES('Chris', 56), ('Bob', 46), ('Adam', 78), ('John', 90), ('Carol', 98);

Xem dữ liệu:

mysql> SELECT * FROM DemoTable1339;
+-------+-------+
| Name  | Score |
+-------+-------+
| Chris | 56    |
| Bob   | 46    |
| Adam  | 78    |
| John  | 90    |
| Carol | 98    |
+-------+

Lấy 4 hàng ngẫu nhiên, sau đó sắp xếp theo Name:

mysql> SELECT * FROM (SELECT * FROM DemoTable1339 ORDER BY RAND() LIMIT 4) tbl ORDER BY Name;

Kết quả (ví dụ - random nên khác mỗi lần):

+-------+-------+
| Name  | Score |
+-------+-------+
| Adam  | 78    |
| Bob   | 46    |
| Carol | 98    |
| Chris | 56    |
+-------+-------+

Giải thích:

  1. Truy vấn con: ORDER BY RAND() LIMIT 4 chọn 4 hàng ngẫu nhiên.
  2. Truy vấn ngoài: ORDER BY Name sắp xếp 4 hàng đó theo tên.

⚠️ Hiệu năng: ORDER BY RAND() quét toàn bảng, chậm trên bảng lớn. Giải pháp thay thế:

  • Lấy MAX(id), sinh ID ngẫu nhiên trong ứng dụng, WHERE id >= rand_id LIMIT n.
  • TABLESAMPLE (MySQL 8.0.23+): SELECT * FROM tbl TABLESAMPLE SYSTEM(10) (10% hàng).