Anh chàng này
hỏi câu hỏi tương tự. Anh ta nói giống như Frank, nhưng trọng số không đúng và trong các nhận xét, ai đó đề xuất sử dụng ORDER BY -LOG(1.0 - RAND()) / Multiplier
, trong thử nghiệm của tôi đã cho kết quả khá hoàn hảo.
(Nếu bất kỳ nhà toán học nào ngoài kia muốn giải thích lý do tại sao điều này đúng, xin hãy khai sáng cho tôi! Nhưng nó hoạt động.)
Điều bất lợi là bạn không thể đặt trọng số thành 0 để tạm thời vô hiệu hóa một tùy chọn, vì cuối cùng bạn sẽ chia cho số không. Nhưng bạn luôn có thể lọc ra bằng WHERE Multiplier > 0
.