MySQL随机查询数据
2011年04月20日

昨晚突发奇想想给那个树洞加一个随机浏览一条信息的功能。然后百度了一下,通俗的方法是:
select * from `table` order by rand() limit 0,1;想起以前博客的随机文章貌似也是用这个实现的,但是网上说这个查询效率太低,确切是效率极低。好吧,那哥就再找一个效率高一点的吧~
百度、谷歌了一大把,发现搜出来的内容都是一篇文章,还都他妈的都原创,艹啊 才知道转载文章能有这么恶心人。不过还是试了篇被转载千万次的文章的方法,效果很差,300多条记录,每次得到的都是ID50以下的,典型的有缺陷嘛。
效率低的不能用,有缺陷的不能用。于是借助PHP的rand函数,我的解决方法就是这样的:
$id=rand(1,10000)/10000;
$sql="SELECT * FROM `table` WHERE id >= (SELECT floor( $id * (SELECT MAX(id) FROM `table`))) ORDER BY id LIMIT 1";
