在线报名 | 加入收藏 | 学校地图

电话:400-0379-707 QQ:710034203

首页 > 学习园地 > 技术教程 > 正文阅读

洛阳北大青鸟:如何在MySQL实现表中取出随机数据?

发布时间:2012-10-25 14:48:26 点击:0
洛阳北大青鸟导读:各位同学接触mysql应该也有一段时间了吧,有没有觉得mysql的语法很好玩呢?原来我们都想用PHP实现随机,洛阳北大青鸟的专业老师经过查询手册发现下面的这个语句,可以一次就完成任务了 。SELECT * FROM tabl...

 

各位同学接触mysql应该也有一段时间了吧,有没有觉得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 c   

但我试了一下,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.*以上才支持这样的子查询.

热词搜索: 洛阳北大青鸟 MySQL
分享该网页到:   转播到腾讯微博  分享到QQ空间
  • ①理论课
  • ②上机课
  • ③职业导向训练(COT)
  • ④指导学习课(DLC)
  • ⑤项目案例课
  • ⑥在线培训课(OLTL)
  • ⑦阶段项目课
  • ⑧毕业设计课
人才招聘 | 视频专区 | 专题活动 | 认证查询 | 网站地图