从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 相关文章推荐
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
Jan 15 PHP
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
Feb 16 PHP
PHP similar_text 字符串的相似性比较函数
May 26 PHP
PHP版网站缓存加快打开速度的方法分享
Jun 03 PHP
深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表
Jun 06 PHP
百度地图API应用之获取用户的具体位置
Jun 10 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
Jun 19 PHP
php通过Chianz.com获取IP地址与地区的方法
Jan 14 PHP
php简单实现多语言切换的方法
May 09 PHP
PHP+RabbitMQ实现消息队列的完整代码
Mar 20 PHP
Laravel 微信小程序后端搭建步骤详解
Nov 26 PHP
yii框架结合charjs实现统计30天数据的方法
Apr 04 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 cli 方式 在crotab中运行解决
2010/02/08 PHP
fleaphp crud操作之find函数的使用方法
2011/04/23 PHP
关于crontab的使用详解
2013/06/24 PHP
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
2015/09/20 PHP
php使用gd2绘制基本图形示例(直线、圆、正方形)
2017/02/15 PHP
php求斐波那契数的两种实现方式【递归与递推】
2019/09/09 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
php中数组最简单的使用方法
2020/12/27 PHP
Aptana调试javascript图解教程
2009/11/30 Javascript
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
JS延时提示框实现方法详解
2015/11/26 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
基于js实现的限制文本框只可以输入数字
2016/12/05 Javascript
Bootstrap中data-target 到底是什么
2017/02/14 Javascript
JavaScript手风琴页面制作
2017/05/17 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
2018/09/12 Javascript
详解ES6中的Map与Set集合
2019/03/22 Javascript
vue安装遇到的5个报错及解决方法
2019/06/12 Javascript
vant 中van-list的用法说明
2020/11/11 Javascript
[56:21]LGD vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[06:07]DOTA2-DPC中国联赛 正赛 Ehome vs VG 选手采访
2021/03/11 DOTA
django项目搭建与Session使用详解
2018/10/10 Python
将pip源更换到国内镜像的详细步骤
2019/04/07 Python
Python实现计算文件MD5和SHA1的方法示例
2019/06/11 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
2019/12/18 Python
python logging 日志的级别调整方式
2020/02/21 Python
Python内置函数locals和globals对比
2020/04/28 Python
King Apparel官网:英国街头服饰品牌
2019/09/05 全球购物
乐观大学生的自我评价
2014/01/10 职场文书
无传销社区工作方案
2014/05/13 职场文书
分公司任命书
2014/06/06 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
公司合作意向书范文
2014/07/30 职场文书
golang switch语句的灵活写法介绍
2021/05/06 Golang
Oracle查看表空间使用率以及爆满解决方案详解
2022/07/23 Oracle