Sắp xếp ngẫu nhiên rồi sắp tên tăng dần
Để lấy một tập mẫu ngẫu nhiên từ bảng rồi sắp xếp kết quả theo tên (A-Z), bạn sử dụng truy vấn con (subquery) với ORDER BY RAND() và LIMIT, sau đó sắp xếp lại bên ngoài.
Cú pháp
SELECT * FROM (
SELECT * FROM tenBang ORDER BY RAND() LIMIT soLuong
) AS bangTam ORDER BY tenCot;
Ví dụ minh họa
Tạo bảng OrderByRandName:
CREATE TABLE OrderByRandName (
Id INT,
Name VARCHAR(100)
);
Chèn 10 bản ghi:
INSERT INTO OrderByRandName VALUES
(100,'John'), (101,'Bob'), (102,'Johnson'), (103,'David'),
(104,'Smith'), (105,'Taylor'), (106,'Sam'), (107,'Robert'),
(108,'Michael'), (109,'Mark');
Truy vấn lấy 10 bản ghi ngẫu nhiên rồi sắp tên A-Z:
SELECT * FROM (
SELECT * FROM OrderByRandName ORDER BY RAND() LIMIT 10
) AS tbl1 ORDER BY Name;
Kết quả mẫu
+------+---------+
| Id | Name |
+------+---------+
| 101 | Bob |
| 103 | David |
| 100 | John |
| 102 | Johnson |
| 109 | Mark |
| 108 | Michael |
| 107 | Robert |
| 106 | Sam |
| 104 | Smith |
| 105 | Taylor |
+------+---------+
Lưu ý hiệu năng: ORDER BY RAND() có thể chậm trên bảng lớn do phải quét toàn bộ bảng. Với dữ liệu lớn, hãy cân nhắc các phương pháp tối ưu như lấy ID ngẫu nhiên trước.