Một bài đăng tuyệt vời xử lý một số trường hợp, từ đơn giản, đến khoảng trống, đến không đồng nhất với khoảng trống.
http://jan.kneschke.de/projects/mysql/order- by-rand /
Đối với hầu hết các trường hợp chung, đây là cách bạn thực hiện:
SELECT name
FROM random AS r1 JOIN
(SELECT CEIL(RAND() *
(SELECT MAX(id)
FROM random)) AS id)
AS r2
WHERE r1.id >= r2.id
ORDER BY r1.id ASC
LIMIT 1
Điều này giả sử rằng việc phân phối id là ngang nhau và có thể có khoảng trống trong danh sách id. Xem bài viết để biết thêm các ví dụ nâng cao