本站内容搜索:
   您的位置:素材中国>>教程 >>数据库 >>MySQL >>MySQL 如何从表中取出随机数据 提交错误报告
MySQL 如何从表中取出随机数据
[ 来源:素材中国 | 作者:采集小组| 时间:2006-03-03 09:51:26 | 浏览:人次 ]

 
 

  以前在群里讨论过这个问题,比较的有意思.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将重复计算列多次。然而在MySQL 3.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 >>MySQL 如何从表中取出随机数据
 点此在百度搜索关键字"MySQL如何从表中取出随机数据"  点此在GOOGLE搜索关键字"MySQL如何从表中取出随机数据"
热门文章:
  ·SQL优化34条   ·sql server分布式事务解决方案
  ·JTDS连接SQL Server中的方法示例   ·MySQL导入导出方法与工具
  ·Mysql数据库学习心得(1)   ·Windows Vista下安装SQL Server 2005
  ·SQL各种写法的效率问题   ·Mysql数据库学习心得(2)
  ·MySQL怎样优化WHERE子句   ·MySQL 4.1 的安装和升级

  首页  素材图片  高精图库  矢量图库  网页素材  网页模板  壁纸  明星  下载  教程  字体  香车美女  QQ专题  论坛

网站介绍 | 广告业务 | 设计业务 | 免责声明 | 版权声明 | 联系我们|提交错误报告
素材中国版权所有