为什么这个 随机抽取记录的 SQL 不工作?

SQL code
SELECT id,title FROM `tbl` 
WHERE id >= (SELECT floor((SELECT RAND()) * (SELECT MAX(id) FROM `tbl`))) 
ORDER BY id LIMIT 1;


取随机数的这部分没问题 (SELECT floor((SELECT RAND()) * (SELECT MAX(id) FROM `tbl`))) ,可以取到随机值, 但是整个语句却只能取到 id 很小范围以内(大概200以内)的记录, 是什么原因呢?

作者: grick   发布时间: 2011-05-28

SELECT id,title FROM `tbl` 
WHERE id >= RAND()*(SELECT MAX(id) FROM `tbl`)  
ORDER BY id LIMIT 1;

作者: ACMAIN_CHM   发布时间: 2011-05-28

引用 1 楼 acmain_chm 的回复:

SELECT id,title FROM `tbl`
WHERE id >= RAND()*(SELECT MAX(id) FROM `tbl`)
ORDER BY id LIMIT 1;


谢谢回复, 不过这个测试了跟我那个一样, 依然还是取到一些id比较小的记录. (一共不到4000条,但取到id在200以内的概率非常大,1000以上的基本上取不到)

作者: grick   发布时间: 2011-05-28


RAND() 每条记录时都会单独计算,如果你想随机取一条记录则应该

select * from tbl order by rand() limit 1;

作者: ACMAIN_CHM   发布时间: 2011-05-28