从MySQL数据库表中取出随机数据的代码

 更新时间:2007年09月05日 22:34:47   投稿:mdxy-dxy  
这个例子是用于一个简单的应用开发了,意思就是把现在表中的所有数据我们随机读出来一次之后再进行随机保存到另一个表,从而达到了记录随机的功能

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>';
}
?>

相关文章

  • 如何使用脚本模仿登陆过程

    如何使用脚本模仿登陆过程

    如何使用脚本模仿登陆过程...
    2006-11-11
  • PHP反射机制用法实例

    PHP反射机制用法实例

    这篇文章主要介绍了PHP反射机制用法,是PHP程序设计中比较重要的概念,需要的朋友可以参考下
    2014-08-08
  • php下过滤HTML代码的函数

    php下过滤HTML代码的函数

    本文通过实例代码给大家介绍了php下过滤HTML代码的函数,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2007-12-12
  • php去除字符串中空字符的常用方法小结

    php去除字符串中空字符的常用方法小结

    这篇文章主要介绍了php去除字符串中空字符的常用方法,实例分析了php中的trim()、ltrim()、rtrim()及chop()等函数的使用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-03-03
  • php数组函数序列之array_flip() 将数组键名与值对调

    php数组函数序列之array_flip() 将数组键名与值对调

    array_flip() 函数将使数组的键名与其相应值调换,即键名变成了值,而值变成了键名
    2011-11-11
  • 非常有用的9个PHP代码片段

    非常有用的9个PHP代码片段

    这篇文章主要为大家介绍了非常有用的9个PHP代码片段,在开发网站、app或博客时,代码片段可以真正地为你节省时间,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • php+mysql实现无限级分类

    php+mysql实现无限级分类

    这篇文章主要介绍了php+mysql实现无限级分类,一个php项目需要用到分类,动手制作了一个php无限极分类,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • php+html优化页面显示速度的方法小结

    php+html优化页面显示速度的方法小结

    这篇文章主要为大家详细介绍了php结合html优化页面显示速度的一些常见方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • php JWT在web端中的使用方法教程

    php JWT在web端中的使用方法教程

    这篇文章主要给大家介绍了关于php JWT在web端中的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • PHP flush 函数使用注意事项

    PHP flush 函数使用注意事项

    ob_flush/flush在手册中的描述, 都是刷新输出缓冲区, 并且还需要配套使用, 所以会导致很多人迷惑…其实, 他们俩的操作对象不同, 有些情况下, flush根本不做什么事情
    2016-08-08

最新评论