从MySQL数据库表中取出随机数据的代码


Posted in PHP onSeptember 05, 2007

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<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.*以上才支持这样的子查询. 

以下是php代码:

<?
//数据库连接就不写在这里面了
$s = isset( $_GET['s'] )?$_GET['s']:0;
$e = isset( $_GET['e'])?$_GET['e']:50;
$count =85000;
if( $s < $count )
{
 $sql = "select * from 表前缀_info where isget =0 order by id desc limit $s,$e ";
 $query = mysql_query( $sql );
 while( $rs = mysql_fetch_array( $query ) )
 {
 $id = $rs['id'];
 $sss = $rs['sss'];
 $typeid = $rs['typeid'];
 $isget = $rs['isget'];
 $sql = "insert into 表前缀_info_bak (id,表前缀,typeid,isget) values('$id','$sss','$typeid','$isget')";
 mysql_query( $sql ) ;
 echo $sql;
 //exit;
 $sqlu = "update 表前缀_info set isget=1 where id =".$rs['id'];
 mysql_query( $sqlu );
 }
 echo '<meta http-equiv="refresh" content="0;url=rand.php?s='.($s+50).'&e=50">正在处理数据,当前为'.$s.'条......';
}
else
{
 echo '完成所有数据处理 <a href=rand.php>再随机排序一次</a>';
}
?>
PHP 相关文章推荐
dedecms后台验证码总提示错误的解决方法
Mar 21 PHP
PHP里的中文变量说明
Jul 23 PHP
ubuntu下编译安装xcache for php5.3 的具体操作步骤
Jun 18 PHP
解析PHP提交后跳转
Jun 23 PHP
php解析json数据实例
Aug 19 PHP
thinkphp文件引用与分支结构用法实例
Nov 26 PHP
基于CakePHP实现的简单博客系统实例
Jun 28 PHP
PHP的文件操作与算法实现的面试题示例
Aug 10 PHP
详解php中反射的应用
Mar 15 PHP
php有效防止图片盗用、盗链的两种方法
Nov 01 PHP
PHP实现一个多功能购物网站的案例
Sep 13 PHP
你真的了解PHP中的引用符号(&)吗
May 12 PHP
从一个不错的留言本弄的mysql数据库操作类
Sep 02 #PHP
利用static实现表格的颜色隔行显示的代码
Sep 02 #PHP
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
Sep 02 #PHP
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
Aug 26 #PHP
海河写的 Discuz论坛帖子调用js的php代码
Aug 23 #PHP
discuz 首页四格:最新话题+最新回复+热门话题+精华文章插件
Aug 19 #PHP
PHP下几种删除目录的方法总结
Aug 19 #PHP
You might like
PHP查询网站的PR值
2013/10/30 PHP
PHP中的socket_read和socket_recv区别详解
2015/02/09 PHP
PHP统一页面编码避免乱码问题
2015/04/09 PHP
php+jQuery实现的三级导航栏下拉菜单显示效果
2017/08/10 PHP
把textarea中字符串里含有的回车换行替换成&amp;lt;br&amp;gt;的javascript代码
2007/04/20 Javascript
js 目录列举函数
2008/11/06 Javascript
JQuery 学习技巧总结
2010/05/21 Javascript
理解Javascript_13_执行模型详解
2010/10/20 Javascript
jquery下为Event handler传递动态参数的代码
2011/01/06 Javascript
基于jquery的textarea发布框限制文字字数输入(添加中文识别)
2012/02/16 Javascript
JavaScript取得鼠标绝对位置程序代码介绍
2012/09/16 Javascript
jQuery Ajax中的事件详细介绍
2015/04/16 Javascript
js带点自动图片轮播幻灯片特效代码分享
2015/09/07 Javascript
jquery $.trim()去除字符串空格的实现方法【附图例】
2016/03/30 Javascript
如何获取元素的最终background-color
2017/02/06 Javascript
JS实现li标签的删除
2019/04/12 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
微信公众号平台接口开发 获取微信服务器IP地址方法解析
2019/08/14 Javascript
Python里disconnect UDP套接字的方法
2015/04/23 Python
使用Python编写爬虫的基本模块及框架使用指南
2016/01/20 Python
Django 生成登陆验证码代码分享
2017/12/12 Python
python psutil库安装教程
2018/03/19 Python
python调用OpenCV实现人脸识别功能
2018/05/25 Python
Python读取数据集并消除数据中的空行方法
2018/07/12 Python
朴素贝叶斯Python实例及解析
2018/11/19 Python
nohup后台启动Python脚本,log不刷新的解决方法
2019/01/14 Python
python如何求100以内的素数
2020/05/27 Python
HTML5标签小集
2011/08/02 HTML / CSS
巴西24小时在线药房:Drogasil
2020/06/20 全球购物
iostream与iostream.h的区别
2015/01/16 面试题
大一期末自我鉴定
2013/12/13 职场文书
文化宣传方案
2014/03/13 职场文书
2014年行政部工作总结
2014/11/19 职场文书
2014年工人工作总结
2014/11/25 职场文书
检讨书格式
2015/01/23 职场文书
2015学校六五普法工作总结
2015/04/22 职场文书