php开源嘛
首页 | English | MySql数据库 | Php编程 | 建站杂烩 | 系统服务器 | 资源共享 | 专题 | 才桀网 | 支持论坛
  当前位置:主页>MySql数据库>文章内容
MySQL 如何从表中取出随机数据
来源:网络 作者:本站整理 发布时间:2007-09-02  

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

phpma以前在群里讨论过这个问题,比较的有意思.mysql的语法真好玩.

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

phpma翻了手册,找到了下面这个语句,可以完成任务了

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
phpma你不能在一个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被执行时重新评估。

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

phpma后来请教了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;

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


(阅读次数:
上一篇:用PHP函数解决SQL injection   下一篇:电子商务网站如何多多赚钱、少费力?
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论
  热点文章
·用于SELECT和WHERE子句的SQL函数
·MySQL索引分析和优化
·MySQL数据库下.frm .MYD .MYI损
·怎么删除MySQL数据库中的重复数
·MySQL数据导入与导出
·MySQL数据库中SQL查询语句精华
·如何优化MySQL数据库性能
·MySQL查询优化之查询优化器
·怎么备份MySQL数据库
·如何导入导出*.sql文件到MySQL数
·MySQL数据导入导出方法与工具介
·MySQL索引分析和优化加速网站访
  相关文章
·如何使用ODBC接口访问MySQL
·从MySQL导出XLS数据库工具
·mysql5存储过程编写实践
·使用MySQL的23个注意事项^……
·优化MYSQL数据库性能的八个方法
·PHPMyAdmin连接MYSQL的问题:故
·SQL删除逻辑重复记录的方法{事例
·MySQL编码问题的经验总结
·MySQL服务器内部安全数据目录访
·Mysql参数优化之初学MYSQL应知道
·高效安全的sql查询代码如何编写?
·轻松接触MySQL数据库支持的3个引

关于我们 | 本站声明 | 友情连接 | 诚邀加盟 | 网站地图
版权Power by DedeCms   技术支持QQ =>> 罗江游鱼   Jacking  后台登陆
Copyright @ 2007 公司地址:柳州市东环路268号 邮编:545006 电话:15920389818 桂ICP备07006725号