MySQL取出随机数据

我叫颜三皮

我叫颜三皮

2016-02-19 10:53

清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐MySQL取出随机数据,无聊中的都看过来。

他们原来都想用PHP的实现随机,但取出多条好像要进行两次以上查询.

翻了手册,找到了下面这个语句,可以完成任务了,但效率较低

SELECT * FROM table_name ORDER BY rand() LIMIT 5;

rand在手册里是这么说的:
RAND() 
RAND(N) 
返回在范围0到1.0内的随机浮点值。如果一个整数参数N被指定,它被用作种子值。 
mysql select RAND();
        - 0.5925
mysql select RAND(20);
        - 0.1811
mysql select RAND(20);
        - 0.1811
mysql select RAND();
        - 0.2079
mysql select RAND();
        - 0.7888
你不能在一个ORDER BY子句用RAND()值使用列,因为ORDER BY将重复计算列多次。然而在MySQL3.23中,你可以做: SELECT * FROM table_name ORDER BY RAND(),这是有利于得到一个来自SELECT * FROM table1,table2 WHERE a=b AND cd ORDER BY RAND() LIMIT 1000的集合的随机样本。注意在一个WHERE子句里的一个RAND()将在每次WHERE被执行时重新评估。 

但我试了一下,8千条记录的表,执行一次需要0.08 sec,.慢了些

后来请教了google,得到如下代码

SELECT *  FROM table_name AS r1 JOIN (SELECT ROUND(RAND() *(SELECT MAX(id) FROM table_name)) AS id) AS r2 WHERE r1.id = r2.id ORDER BY r1.id ASC LIMIT 5; 

执行效率需要0.02 sec.可惜的是,只有mysql 4.1.*以上才支持这样的子查询. 

下面是其它网友的补充:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

select id from  zhyx_items   order by rand()  这样效率太低了

优化sql语句之后:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)
SELECT t1.id FROM zhyx_items AS t1 JOIN (SELECT ROUND(RAND() *((SELECT MAX(id) FROM zhyx_items)-(SELECT MIN(id) FROM zhyx_items))+(SELECT MIN(id) FROM zhyx_items)) AS id) AS t2 WHERE t1.id = t2.id ORDER BY t1.id LIMIT 0,5;
展开更多 50%)
分享

猜你喜欢

MySQL取出随机数据

编程语言 网络编程
MySQL取出随机数据

MySQL从表中取出随机数据

编程语言 网络编程
MySQL从表中取出随机数据

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

MySQL实现表中取出随机数据

MySQL mysql数据库
MySQL实现表中取出随机数据

MySQL 如何从表中取出随机数据

MySQL mysql数据库
MySQL 如何从表中取出随机数据

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

MySQL随机选取数据

编程语言 网络编程
MySQL随机选取数据

用ASP随机产生随机数

ASP
用ASP随机产生随机数

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

我不再爱你了 - QQ伤感分组

我不再爱你了 - QQ伤感分组

Server.Transfer,Response.Redirect的区别

Server.Transfer,Response.Redirect的区别
下拉加载更多内容 ↓