从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 isset()与empty()的使用区别详解
Aug 29 PHP
PHP手机号码归属地查询代码(API接口/mysql)
Sep 04 PHP
php中长文章分页显示实现代码
Sep 29 PHP
利用PHP+JS实现搜索自动提示(实例)
Jun 09 PHP
php自动加载autoload机制示例分享
Feb 20 PHP
php实现水仙花数示例分享
Apr 03 PHP
php加速器eAccelerator的配置参数、API详解
May 05 PHP
WordPress开发中短代码的实现及相关函数使用技巧
Jan 05 PHP
Symfony2中被遗弃的getRequest()方法分析
Mar 17 PHP
[原创]smarty简单模板变量输出方法
Jul 09 PHP
PHP经典实用正则表达式小结
May 04 PHP
PHP实现小程序批量通知推送
Nov 27 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下通过file_get_contents的代理使用方法
2011/02/16 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
php算法实例分享
2015/07/14 PHP
CI框架中redis缓存相关操作文件示例代码
2016/05/17 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
2019/03/21 PHP
在thinkphp5.0路径中实现去除index.php的方式
2019/10/16 PHP
jquery实现手风琴效果实例代码
2013/11/15 Javascript
用js来刷新当前页面保留参数的具体实现
2013/12/23 Javascript
理解和运用JavaScript的闭包机制
2015/08/13 Javascript
微信支付如何实现内置浏览器的H5页面支付
2015/09/25 Javascript
javascript每日必学之基础入门
2016/02/16 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
2016/10/18 Javascript
Angular.js跨controller实现参数传递的两种方法
2017/02/20 Javascript
JS批量替换内容中关键词为超链接
2017/02/20 Javascript
微信小程序实现通过双向滑动缩放图片大小的方法
2018/12/30 Javascript
Vue组件系列开发之模态框
2019/04/18 Javascript
js实现select下拉框选择
2020/01/11 Javascript
nginx部署多个vue项目的方法示例
2020/09/06 Javascript
vue监听滚动事件的方法
2020/12/21 Vue.js
Python返回真假值(True or False)小技巧
2015/04/10 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
在Keras中利用np.random.shuffle()打乱数据集实例
2020/06/15 Python
opencv 图像礼帽和图像黑帽的实现
2020/07/07 Python
Python3爬虫mitmproxy的安装步骤
2020/07/29 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
2020/10/20 Python
CSS3实现时间轴特效
2020/11/02 HTML / CSS
HTML5的Video标签有部分MP4无法播放的问题解析(多图)
2017/08/18 HTML / CSS
在SQL Server中创建数据库主要有那种方式
2013/09/10 面试题
进口业务员岗位职责
2014/04/06 职场文书
农村党支部书记党群众路线四风问题整改措施
2014/09/26 职场文书
大学生学习新党章思想汇报
2014/10/25 职场文书
详解Python小数据池和代码块缓存机制
2021/04/07 Python
Python 批量下载阴阳师网站壁纸
2021/05/19 Python
使用HttpSessionListener监听器实战
2022/03/17 Java/Android
Java基础——Map集合
2022/04/01 Java/Android
小程序自定义轮播图圆点组件
2022/06/25 Javascript