e股脑电脑教程网
  • 首 页
  • 操作系统
  • 应用软件
  • 下载工具
  • 影音视频
  • 办公软件
  • 媒体制作
  • 网站建设
  • 平面设计
  • 数据库
  • 程序开发
  • 视频教程
编辑推荐: | 文章搜索:
您现在的位置: e股脑 >> 数据库 >> MySQL教程 >> MySQL 如何从表中取出随机数据 >> 教程正文
 
教程搜索
 
 
相关教程
  • MySQL 如何从表中取出随机
  • MySQL 5.0 触发器
  • MySQL常见错误问答!
  • Linux应用集成MySQL数据库
  • Mysql中的临时表使用方法
  • MySQL的转义字符“\”
  • 学习使用数据库MySQL
  • MYSQL服务维护及应用设计
  • MySQL简易备份方法
  • MySQL UDF的调试方式 - d
  • MySQL_常用查询的例子
  • 一个实例讲解MySQL查询优
  • 用批处理对MySQL进行数据
  • MySQL服务维护笔记 续
  • MySQL服务维护笔记
  • MYSQL初学者使用指南 下篇
 
 
赞 助 商
 
 
MySQL 如何从表中取出随机数据
  • 来源:e股脑
  • 点击次数:
  • 更新时间:2006-11-8
以前在群里讨论过这个问题,比较的有意思.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<d 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.*以上才支持这样的子查询.

  • 上一篇教程: MySQL 5.0 触发器
  • 下一篇教程: 没有了
  •  

    关于本站 | 广告联系 | 版权声明 | 使用帮助

    Copyright © 2004-2008 www.egunao.com All rights reserved.