从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的论坛(3)
Oct 09 PHP
excellent!――ASCII Art(由目标图象生成ascii)
Feb 20 PHP
PHP 采集程序 常用函数
Dec 18 PHP
Search File Contents PHP 搜索目录文本内容的代码
Feb 21 PHP
php模拟socket一次连接,多次发送数据的实现代码
Jul 26 PHP
php使用curl简单抓取远程url的方法
Mar 13 PHP
YII Framework框架教程之日志用法详解
Mar 14 PHP
MAC下通过改apache配置文件切换php多版本的方法
Apr 26 PHP
php变量与JS变量实现不通过跳转直接交互的方法
Aug 25 PHP
phpStudy2016 配置多个域名期间遇到的问题小结
Oct 19 PHP
php的无刷新操作实现方法分析
Feb 28 PHP
phpQuery解析HTML乱码问题(补充官网未列出的乱码解决方案)
Apr 01 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
基于JQuery+PHP编写砸金蛋中奖程序
2015/09/08 PHP
PHP实现的构造sql语句类实例
2016/02/03 PHP
php微信公众号开发(3)php实现简单微信文本通讯
2016/12/15 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
JavaScript的Cookies
2008/01/16 Javascript
使用jquery插件实现图片延迟加载技术详细说明
2011/03/12 Javascript
javascript函数以及基础写法100多条实用整理
2013/01/13 Javascript
表单元素的submit()方法和onsubmit事件应用概述
2013/02/01 Javascript
jquery弹出框的用法示例(2)
2013/08/26 Javascript
CheckBoxList多选样式jquery、C#获取选择项
2013/09/06 Javascript
JS实现图片翻书效果示例代码
2013/09/09 Javascript
JavaScript中的Math 使用介绍
2014/04/21 Javascript
浅析创建javascript对象的方法
2016/05/13 Javascript
基于Phantomjs生成PDF的实现方法
2016/11/07 Javascript
JS数组搜索之折半搜索实现方法分析
2017/03/27 Javascript
node.js中EJS 模板快速入门教程
2017/05/08 Javascript
JS常见面试试题总结【去重、遍历、闭包、继承等】
2019/08/27 Javascript
JavaScript Array对象使用方法解析
2019/09/24 Javascript
vue滑动吸顶及锚点定位的示例代码
2020/05/10 Javascript
google广告之另类js调用实现代码
2020/08/22 Javascript
解决antd Form 表单校验方法无响应的问题
2020/10/27 Javascript
js实现简单图片拖拽效果
2021/02/22 Javascript
[00:36]DOTA2勇士令状莱恩声望物品——冥晶之厄展示
2018/05/25 DOTA
Flask框架的学习指南之开发环境搭建
2016/11/20 Python
Python用Pillow(PIL)进行简单的图像操作方法
2017/07/07 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
2018/12/11 Python
Python利用字典破解WIFI密码的方法
2019/02/27 Python
Python写捕鱼达人的游戏实现
2020/03/31 Python
Peter Alexander新西兰站:澳大利亚领先的睡衣设计师品牌
2016/12/10 全球购物
泰国办公用品购物网站:OfficeMate
2018/02/04 全球购物
结婚喜宴主持词
2014/03/14 职场文书
疾病防治方案
2014/05/31 职场文书
复兴之路展览观后感
2015/06/02 职场文书
python中__slots__节约内存的具体做法
2021/07/04 Python
Innodb存储引擎中的后台线程详解
2022/04/03 MySQL