为什么这个 随机抽取记录的 SQL 不工作?
SQL code
取随机数的这部分没问题 (SELECT floor((SELECT RAND()) * (SELECT MAX(id) FROM `tbl`))) ,可以取到随机值, 但是整个语句却只能取到 id 很小范围以内(大概200以内)的记录, 是什么原因呢?
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;
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;
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