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:
- Truy vấn con:
ORDER BY RAND() LIMIT 4chọn 4 hàng ngẫu nhiên. - Truy vấn ngoài:
ORDER BY Namesắ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).