从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实现的MySQL数据浏览器
Mar 11 PHP
深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表
Jun 06 PHP
解析如何用php screw加密php源代码
Jun 20 PHP
php对图像的各种处理函数代码小结
Jul 08 PHP
php返回当前日期或者指定日期是周几
May 21 PHP
PHP定时执行任务实现方法详解(Timer)
Jul 30 PHP
Yii中CGridView实现批量删除的方法
Dec 28 PHP
php如何执行非缓冲查询API
Jul 22 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
May 05 PHP
使用PHP+MySql实现微信投票功能实例代码
Sep 29 PHP
php JWT在web端中的使用方法教程
Sep 06 PHP
关于laravel后台模板laravel-admin select框的使用详解
Oct 03 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
本地计算机无法启动Apache故障处理
2014/08/08 PHP
CI框架验证码CAPTCHA辅助函数用法实例
2014/11/05 PHP
分享PHP-pcntl 实现多进程代码
2016/09/30 PHP
详解PHP编码转换函数应用技巧
2016/10/22 PHP
javascript之解决IE下不渲染的bug
2007/06/29 Javascript
Javascript 函数对象的多重身份
2009/06/28 Javascript
JS小框架 fly javascript framework
2009/11/26 Javascript
用JQuery 判断某个属性是否存在hasAttr的解决方法
2013/04/26 Javascript
详解堆的javascript实现方法
2016/11/29 Javascript
vue实现商城购物车功能
2017/11/27 Javascript
详解JS模块导入导出
2017/12/20 Javascript
JQuery Ajax动态加载Table数据的实例讲解
2018/08/09 jQuery
Vue 第三方字体图标引入 Font Awesome的方法
2018/09/28 Javascript
vue-cli3 项目优化之通过 node 自动生成组件模板 generate View、Component
2019/04/30 Javascript
策略模式实现 Vue 动态表单验证的方法
2019/09/16 Javascript
Vue-Cli项目优化操作的实现
2019/10/27 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
CentOS中使用virtualenv搭建python3环境
2015/06/08 Python
Python中logging.NullHandler 的使用教程
2018/11/29 Python
python定时检测无响应进程并重启的实例代码
2019/04/22 Python
python 魔法函数实例及解析
2019/09/25 Python
matlab灰度图像调整及imadjust函数的用法详解
2020/02/27 Python
迪奥美国官网:Dior美国
2019/12/07 全球购物
伊莱克斯阿根廷网上商店:Tienda Electrolux
2021/03/08 全球购物
利用异或运算实现两个无符号数的加法运算
2013/12/20 面试题
大学生如何写自荐信
2014/01/08 职场文书
渔夫的故事教学反思
2014/02/14 职场文书
岗位职责风险点
2014/03/12 职场文书
市场开发计划书
2014/05/07 职场文书
2014年教师德育工作总结
2014/11/10 职场文书
先进教师个人事迹材料
2014/12/15 职场文书
质量承诺书格式范文
2015/04/28 职场文书
期中考试后的感想
2015/08/07 职场文书
初中班干部工作总结
2015/08/10 职场文书
mysql如何查询连续记录
2022/05/11 MySQL
JS前端可视化canvas动画原理及其推导实现
2022/08/05 Javascript