从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 图片文件上传实现代码
Dec 29 PHP
PHP如何抛出异常处理错误
Mar 02 PHP
PHP开发不能违背的安全规则 过滤用户输入
May 01 PHP
ThinkPHP实现动态包含文件的方法
Nov 29 PHP
PHP实现自动识别Restful API的返回内容类型
Feb 07 PHP
php从完整文件路径中分离文件目录和文件名的方法
Mar 13 PHP
php访问数组最后一个元素的函数end()用法
Mar 18 PHP
php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证
May 04 PHP
PHPMailer发送邮件
Dec 28 PHP
PHP的自定义模板引擎
Mar 24 PHP
PHP培训要多少钱
Jun 06 PHP
微信推送功能实现方式图文详解
Jul 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
iOS+PHP注册登录系统 PHP部分(上)
2016/12/26 PHP
PHP异常类及异常处理操作实例详解
2018/12/19 PHP
为你的 Laravel 验证器加上多验证场景的实现
2020/04/07 PHP
从JavaScript的函数重名看其初始化方式
2007/03/08 Javascript
用roll.js实现的图片自动滚动+鼠标触动的特效
2007/03/18 Javascript
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
JavaScript中的Array对象使用说明
2011/01/17 Javascript
jQuery hover 延时器实现代码
2011/03/12 Javascript
对frameset、frame、iframe的js操作示例代码
2013/08/16 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
Bootstrap3学习笔记(三)之表格
2016/05/20 Javascript
Bootstrap框架安装使用详解
2017/01/21 Javascript
JavaScript自定义文本框光标
2017/03/05 Javascript
Vue中fragment.js使用方法详解
2017/03/09 Javascript
简单实现js点击展开二级菜单功能
2017/05/16 Javascript
vue一步步实现alert功能
2017/07/05 Javascript
vue-cli项目代理proxyTable配置exclude的方法
2018/09/20 Javascript
JS中超越现实的匿名函数用法实例分析
2019/06/21 Javascript
keep-Alive搭配vue-router实现缓存页面效果的示例代码
2020/06/24 Javascript
jQuery实现鼠标拖拽登录框移动效果
2020/09/13 jQuery
vue 通过 Prop 向子组件传递数据的实现方法
2020/10/30 Javascript
[52:12]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
在Python中调用ggplot的三种方法
2015/04/08 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
python实现linux下抓包并存库功能
2018/07/18 Python
利用python如何在前程无忧高效投递简历
2019/05/07 Python
在django admin中添加自定义视图的例子
2019/07/26 Python
python中调试或排错的五种方法示例
2019/09/12 Python
python实现跨excel sheet复制代码实例
2020/03/03 Python
python的sys.path模块路径添加方式
2020/03/09 Python
酒店节能降耗方案
2014/05/08 职场文书
酒店优秀员工事迹材料
2014/06/02 职场文书
品牌转让协议书
2014/08/20 职场文书
三十年同学聚会致辞
2015/07/28 职场文书
2016年庆祝六一儿童节活动总结
2016/04/06 职场文书
教你使用Jenkins集成Harbor自动发布镜像
2022/04/03 Servers