从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 相关文章推荐
php GD绘制24小时柱状图
Jun 28 PHP
PHP数据类型之布尔型的介绍
Apr 28 PHP
PHP中fwrite与file_put_contents性能测试代码
Aug 02 PHP
php生成静态页面的简单示例
Apr 17 PHP
THINKPHP内容分页代码分享
Jan 14 PHP
PHP 绘制网站登录首页图片验证码
Apr 12 PHP
Yii框架实现邮箱激活的方法【数字签名】
Oct 18 PHP
thinkPHP交易详情查询功能详解
Dec 02 PHP
Yii框架实现的验证码、登录及退出功能示例
May 20 PHP
php处理多图上传压缩代码功能
Jun 13 PHP
Ajax+Jpgraph实现的动态折线图功能示例
Feb 11 PHP
Laravel ORM 数据model操作教程
Oct 21 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中如何将数组变量写入文件
2013/06/06 PHP
关于锚点跳转及jQuery下相关操作与插件
2012/10/01 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
js判断页面中是否有指定控件的简单实例
2014/03/04 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
实现非常简单的js双向数据绑定
2015/11/06 Javascript
jquery关于事件冒泡和事件委托的技巧及阻止与允许事件冒泡的三种实现方法
2015/11/27 Javascript
jQuery代码实现对话框右上角菜单带关闭×
2016/05/03 Javascript
JavaScript中offsetWidth的bug及解决方法
2017/05/17 Javascript
JS实现电商放大镜效果
2017/08/24 Javascript
vue不通过路由直接获取url中参数的方法示例
2017/08/24 Javascript
webpack4.x CommonJS模块化浅析
2018/11/09 Javascript
JavaScript实现的滚动公告特效【基于jQuery】
2019/07/10 jQuery
javaScript 实现重复输出给定的字符串的常用方法小结
2020/02/20 Javascript
nodejs中使用worker_threads来创建新的线程的方法
2021/01/22 NodeJs
[06:10]6.81新信使新套装!给你一个炫酷的DOTA2
2014/05/06 DOTA
[52:32]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第三场 11.18
2020/11/18 DOTA
python启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
2009/04/09 Python
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
2016/09/21 Python
Python numpy实现数组合并实例(vstack,hstack)
2018/01/09 Python
linecache模块加载和缓存文件内容详解
2018/01/11 Python
python3使用smtplib实现发送邮件功能
2018/05/22 Python
Python 数值区间处理_对interval 库的快速入门详解
2018/11/16 Python
Django 通过JS实现ajax过程详解
2019/07/30 Python
python字典的setdefault的巧妙用法
2019/08/07 Python
python中eval与int的区别浅析
2019/08/11 Python
python selenium实现发送带附件的邮件代码实例
2019/12/10 Python
python 串行执行和并行执行实例
2020/04/30 Python
详解python tkinter 图片插入问题
2020/09/03 Python
python基于socket模拟实现ssh远程执行命令
2020/12/05 Python
html5 利用canvas实现超级玛丽简单动画
2013/09/06 HTML / CSS
护士感人事迹
2014/05/01 职场文书
责任书格式范文
2014/07/28 职场文书
2015年信息技术教研组工作总结
2015/07/22 职场文书
Python实现列表拼接和去重的三种方式
2021/07/02 Python
python3操作redis实现List列表实例
2021/08/04 Python