xài where id >= random_id là được rồi mà như chủ thớt đã ghi :V
select col from tbl where id >= a1 Limit 1
union
select col from tbl where id >= a2 Limit 1
union
...
union
select col from tbl where id >= an Limit 1
cách này ko chắc chắn thu về đúng n kết quả được, ví dụ lỗ hổng mấy đoạn id [1-99], n=50, 2 số random a10 và a50 là 45 75 thì where id >= an đều trả về id=100, union lại chỉ còn n=49 số chứ ko phải n=50 số :V Lại phải làm 1 vòng while n thu được < n cần :V
nhanh hơn nhưng cần phải viết code ngoài db tạo cái chuỗi query, rồi code nhập nhiều kết quả n thu được lại thành 1, rồi phải random sampling kết quả này :V :V
à mà cách where id >= x này có thể cho xác suất ngẫu nhiên ko đều: ví dụ 100 record, mất 98 record 2-99, còn lại record 1 và 100, thì random x từ 1-100 99% thu được x > 1, 1 % thu được x = 1, vậy where id >= x trả về 99% là id=100, 1% là id=1 :V Trong khi đáng lẽ phải trả về 50%- 50%. Cách này tùy vào lỗ hổng rộng bao nhiêu mà độ “ngẫu nhiên” cao hay thấp :V
muốn chính xác toàn bộ thì bước 1 phải quét tất cả id trong bảng lên, rồi sample n id từ bảng này, rồi select … in (n samples), vậy cũng gần y hệt như order by rand() rồi :V Ko biết order by rand() nó có biết tối ưu thay vì sort nó đi sample ko nhỉ :V