select rand() from tablename limit 0,20;

解决方案 »

  1.   

    这个就把记录的id号全读出来,然后写到数组里,然后取随机数,按随机数从数组里取ID号,这样基本上就是随机的20条记录了。
    当然也可以用游标来做。反正思路就这样了。
      

  2.   

    有些时候,我们常常需要从数据库中随机取出一些记录,下面的这个例子就展示了如何从数据库中随机取出一组数据或者某条记录。<?php 
     $db_con=mysql_connect(myhost,myuser,mypassword); 
     mysql_select_db( "mydatebase",$db_con); 
     $sql= "select * form mytable"; 
     $result=mysql_query($sql); 
     $max_num=mysql_num_rows($result); 
     srand((double)microtime()*1000000);  //生成随机数种子。这个是zz自php4的手册 
     $se_pos=rand(1, $max_num);            //从1到最大记录数取随机数 
     $length=20;                           //设定共取多少条记录 
    //下面是取出指定数目的记录。 
     $sql_lim= "select * from mytable limit $se_pos,$length"; 
     $result_lim=mysql_query($sql_lim); 
     $myrow_lim=mysql_fetch_array($result_lim); 
    //然后就可以用$myrow[字段名]来输出结果了。 
    //当然,也可以取指定记录 
      $sql_app= "select * from mytable where id=$se_pos"; 
      $result_app=mysql_query($sql_app); 
      $myrow_app=mysql_fetcha_arry($result_app); 
    ?> 
      

  3.   

    楼上的做法"select * from table"会不会影响性能,如果数据库很大的时候??
      

  4.   

    一般我们会预先生成ID的列表,然后再按照偏移量来随机取内容ID号
      

  5.   

    以上几位的方法是可以随机取出20条数据,但是这20条记录会有相同的,比喻随机取出ID为5的数据,但是在这20条记录里有可能再取出一条ID为5的数据,因为是随机的。我希望随机取出的20条记录没有相同的数据,否则一套考题有两道相同的题就乱套了。
      

  6.   

    那这样吧~~你做一个ID_array吧~~每随机取一次~~就把数组中对应的值赋为一个不可能的值~~比如-1~~当然你取的时候就不光是用随机数做数组下标去取了~~还要判断取出来的是不是-1~~get()方法就一个while咯~~^_^
      

  7.   

    楼上的做法是不是在取出一条记录时做一个记号,下次随机取时忽略这条记录。如果是这样确实非常好,但是不是还要加一个字段做标记用呢呢,我的ID是自动增加的,不能改。
      下面是我的随机取方式,大家再想想再我下面这些代码里加些什么判断更适合更合理,或者是一套新程序,主要取出的值一定不能一样。//$yu_rows是数据库的行数
    //yu_select($sql)是一个自定义函数,取出数据库的值给$myrow
    //$myrow[problem]是问题内容
    //$myrow[ask_1]、$myrow[ask_2]、$myrow[ask_3]、$myrow[ask_4]是选择mt_srand((double)microtime()*1000000);   //设定随机数
    for($bbb=1;$bbb<=5;$bbb++)               //在题库选择5道题
      {
      $n=mt_rand(1,$yu_rows);                //在题库随机取出一个ID号
      $sql="select * from $Mcse_tiku70_228 where id='$n'";     //根据ID号选择题库
       yu_select($sql);
       echo "第 $bbb 题:<font color=#0066FF>$myrow[problem]</font><br>";                           //显示答题内容
       echo "<input type='radio' name='problem_$bbb' value='1'>$myrow[ask_1]<br>";       //显示选项
       echo "      <input type='radio' name='problem_$bbb' value='2'>$myrow[ask_2]<br>";
       echo "      <input type='radio' name='problem_$bbb' value='3'>$myrow[ask_3]<br>";
       echo "      <input type='radio' name='problem_$bbb' value='4'>$myrow[ask_4]<br>";
      }
      

  8.   

    可以按随机起点和随机步长进行取记录。
    第一个id=随机起点
    下一个id={x|x>=上个id+随机步长,x为满足条件的第一个}
    然后做个循环。
      

  9.   

    http://www.csdn.net/expert/topic/531/531855.xml
      

  10.   

    select * from msgboard order by rand() limit 1,10;