从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笔记之:AOP的应用
Apr 24 PHP
destoon常用的安全设置概述
Jun 21 PHP
PHP进程同步代码实例
Feb 12 PHP
php保存任意网络图片到服务器的方法
Apr 14 PHP
Yii使用技巧大汇总
Dec 29 PHP
yii2超好用的日期组件和时间组件
May 05 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
PHP ADODB生成下拉列表框功能示例
May 29 PHP
PHP命名空间与自动加载类详解
Sep 04 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
May 27 PHP
Yii 使用intervention/image拓展实现图像处理功能
Jun 22 PHP
详解no input file specified 三种解决方法
Nov 29 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
全国FM电台频率大全 - 14 江西省
2020/03/11 无线电
php抓取https的内容的代码
2010/04/06 PHP
php数据类型判断函数有哪些
2013/09/23 PHP
使用纯php代码实现页面伪静态的方法
2015/07/25 PHP
Zend Framework教程之动作的基类Zend_Controller_Action详解
2016/03/07 PHP
PHP设计模式之工厂方法设计模式实例分析
2018/04/25 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
2020/03/27 PHP
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
js通过元素class名字获取元素集合的具体实现
2014/01/06 Javascript
jquery中对于批量deferred的处理方法
2014/01/22 Javascript
控制台报错object is not a function的解决方法
2014/08/24 Javascript
jQuery绑定事件的几种实现方式
2016/05/09 Javascript
js定义类的几种方法(推荐)
2016/06/08 Javascript
vue移动端html5页面根据屏幕适配的四种解决方法
2018/10/19 Javascript
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
JS面向对象编程实现的Tab选项卡案例详解
2020/03/03 Javascript
jQuery实现倒计时功能完整示例
2020/06/01 jQuery
详解vue3.0 diff算法的使用(超详细)
2020/07/01 Javascript
使用python爬虫实现网络股票信息爬取的demo
2018/01/05 Python
python如何去除字符串中不想要的字符
2020/07/05 Python
Python中实现单例模式的n种方式和原理
2018/11/14 Python
用python做游戏的细节详解
2019/06/25 Python
浅谈对pytroch中torch.autograd.backward的思考
2019/12/27 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
Skyscanner新西兰:全球领先的旅游搜索网站
2019/08/26 全球购物
西安众合通用.net笔试题
2013/03/18 面试题
人力资源部培训专员岗位职责
2014/01/02 职场文书
保护母亲河倡议书
2014/04/14 职场文书
大学毕业论文致谢词
2015/05/14 职场文书
2015年高校保卫处工作总结
2015/07/23 职场文书
python实现调用摄像头并拍照发邮箱
2021/04/27 Python
MySQL 存储过程的优缺点分析
2021/05/20 MySQL
JavaScript 对象创建的3种方法
2021/11/17 Javascript
Java 写一个简单的图书管理系统
2022/04/26 Java/Android