从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 相关文章推荐
Adodb的十个实例(清晰版)
Dec 31 PHP
PHP Zip压缩 在线对文件进行压缩的函数
May 26 PHP
php抓取页面与代码解析 推荐
Jul 23 PHP
PHP中for与foreach的区别分析
Mar 09 PHP
解析PHP工厂模式的好处
Jun 18 PHP
PHP删除HTMl标签的实现代码
Jun 30 PHP
PHP登录环节防止sql注入的方法浅析
Jun 30 PHP
PHP模块memcached使用指南
Dec 08 PHP
php类自动加载器实现方法
Jul 28 PHP
php数组冒泡排序算法实例
May 06 PHP
PHP简单实现二维数组赋值与遍历功能示例
Oct 19 PHP
PHP使用函数用法详解
Sep 30 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实现约瑟夫问题的方法小结
2015/03/23 PHP
js trim函数 去空格函数与正则集锦
2009/11/20 Javascript
非常漂亮的JS+CSS图片幻灯切换特效
2013/11/20 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
2014/05/28 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
jquery实现页面关键词高亮显示的方法
2015/03/12 Javascript
javascript事件委托的方式绑定详解
2015/06/10 Javascript
用jQuery获取table中行id和td值的实现代码
2016/05/19 Javascript
Javascript使用function创建类的两种方法(推荐)
2016/11/19 Javascript
JS封装通过className获取元素的函数示例
2016/12/20 Javascript
Angular.js实现多个checkbox只能选择一个的方法示例
2017/02/24 Javascript
AngularJS路由切换实现方法分析
2017/03/17 Javascript
shiro授权的实现原理
2017/09/21 Javascript
Vue 去除路径中的#号
2018/04/19 Javascript
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
2018/04/21 Javascript
使用React手写一个对话框或模态框的方法示例
2019/04/25 Javascript
vue 使用高德地图vue-amap组件过程解析
2019/09/07 Javascript
多页vue应用的单页面打包方法(内含打包模式的应用)
2020/06/11 Javascript
JS canvas实现画板和签字板功能
2021/02/23 Javascript
[09:33]2015国际邀请赛第四日TOP10
2015/08/08 DOTA
Pyramid添加Middleware的方法实例
2013/11/27 Python
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
2014/07/18 Python
python实现字符串和日期相互转换的方法
2015/05/13 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
2017/09/22 Python
Django实现跨域的2种方法
2019/07/31 Python
Flask教程之重定向与错误处理实例分析
2019/08/01 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
2019/09/07 Python
Python函数参数类型及排序原理总结
2019/12/19 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
Pycharm+Python工程,引用子模块的实现
2020/03/09 Python
关于PySnooper 永远不要使用print进行调试的问题
2021/03/04 Python
Jack Rogers官网:美国经典的女性鞋靴品牌
2019/09/04 全球购物
移动通信专业自荐信范文
2013/11/12 职场文书
2015高三毕业寄语赠言
2015/02/27 职场文书
Python自动化之批量处理工作簿和工作表
2021/06/03 Python
如何用python清洗文件中的数据
2021/06/18 Python