0元购京东自营斐讯K2路由器返399元活动
置顶

如何正确的使用MySQL数据库RAND()函数进行随机查询

作者:     目录: 小代码     发表: 2015年11月03日

MySQL数据库提供了RAND()随机数函数,使用它可以实现随机查询数据库的记录。但是如果RAND()函数使用不当的话,则可能导致查询结果不理想或者查询效率很低

从数据库中随机查询1条记录,一般采用如下的SQL语句

SELECT * FROM `table`  WHERE id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`)) + (SELECT MIN(id) FROM `table`))) ORDER BY id LIMIT 1;

但是经过实践之后发现上面的执行上面的语句之后返回的查询结果很集中,随机的范围很小。后来经过试验之后,RAND()函数的位置对结果影响很大,大家可以试一下下面的两条语句,看看返回结果。

1. SELECT RAND()*1000 FROM TABLE
2. SELECT id FROM table WHERE ID>RAND()*1000

语句1 SELECT RAND()*1000 FROM TABLE 返回的结果很随机,在1-1000之间很分散。但使用语句2 SELECT id FROM table WHERE ID>RAND()*1000 返回的结果很集中,几乎集中在900左右,因此,RAND()函数放在WHERE语句中返回的结果不是我们期望的。

如何正确的使用MySQL数据库RAND()函数进行随机查询呢?最后想的的方法如下:

首先,利用RAND()函数先生成一个随机数 randNumber,可以使用 SELECT RAND()*1000 as randNumber FROM TABLE 返回一个随机数randNumber,上面语句中的1000,可自己更换为数据库中最大的id,然后再使用SELECT 查询语句,比如 SELECT id FROM table WHERE ID>=randNumber 即可真正返回一个随机记录。

范例:http://weimeiai.com

标签: .

发表评论

电子邮件地址不会被公开。 必填项已用*标注