从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的一些小问题
Jul 03 PHP
PHP文件打开、关闭、写入的判断与执行代码
May 24 PHP
PHP和.net中des加解密的实现方法
Feb 27 PHP
php命令行使用方法和命令行参数说明
Apr 08 PHP
Yii Framework框架获取分类下面的所有子类方法
Jun 20 PHP
PHP屏蔽过滤指定关键字的方法
Nov 03 PHP
PHP生成随机数的方法实例分析
Jan 22 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
Mar 25 PHP
基于php实现随机合并数组并排序(原排序)
Nov 26 PHP
php与c 实现按行读取文件实例代码
Jan 03 PHP
解决laravel查询构造器中的别名问题
Oct 17 PHP
基于Laravel 多个中间件的执行顺序详解
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实现按指定大小等比缩放生成上传图片缩略图的方法
2014/12/15 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
Prototype使用指南之range.js
2007/01/10 Javascript
借用Google的Javascript API Loader来加速你的网站
2009/01/28 Javascript
JQuyer $.post 与 $.ajax 访问WCF ajax service 时的问题需要注意的地方
2011/09/20 Javascript
常见的jQuery选择器汇总
2014/11/24 Javascript
JavaScript学习笔记之Cookie对象
2015/01/22 Javascript
包含中国城市的javascript对象实例
2015/08/03 Javascript
Javascript中arguments对象的详解与使用方法
2016/10/04 Javascript
javaScript中定义类或对象的五种方式总结
2016/12/04 Javascript
JavaScript 限制文本框不可输入英文单双引号的方法
2016/12/20 Javascript
js实现贪吃蛇小游戏(容易理解)
2017/01/22 Javascript
浅谈在Vue-cli里基于axios封装复用请求
2017/11/06 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
js定义类的方法示例【ES5与ES6】
2019/07/30 Javascript
js判断密码强度的方法
2020/03/18 Javascript
浅析JavaScript 函数防抖和节流
2020/07/13 Javascript
python3访问sina首页中文的处理方法
2014/02/24 Python
Python网络爬虫实例讲解
2016/04/28 Python
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
python中redis的安装和使用
2016/12/04 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
2018/03/13 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
Python实现带下标索引的遍历操作示例
2019/05/30 Python
Python 的 f-string 可以连接字符串与数字的原因解析
2021/02/20 Python
css3实例教程 一款纯css3实现的发光屏幕旋转特效
2014/12/07 HTML / CSS
兰蔻加拿大官方网站:Lancome加拿大
2016/08/05 全球购物
加拿大约会网站:EliteSingles.ca
2018/01/12 全球购物
信号量和自旋锁的区别?如何选择使用?
2015/09/08 面试题
生日主持词
2014/03/20 职场文书
宣传部部长竞选演讲稿
2014/04/26 职场文书
监督检查工作方案
2014/05/28 职场文书
新闻报道策划方案
2014/06/11 职场文书
2014年精神文明工作总结
2014/12/23 职场文书
jackson json序列化实现首字母大写,第二个字母需小写
2021/06/29 Java/Android
手写实现JS中的new
2021/11/07 Javascript