SELECT tid,subject FROM threads ORDER BY rand() LIMIT 5; 这样的随机5个是没有问题,不过数据量一大就非常的慢了其他有条语句
SELECT tid,subject FROM threads WHERE tid>=(SELECT floor(RAND() * (SELECT MAX(tid) FROM threads))) LIMIT 5;
这样的速度是很快了,不过存在一个问题
当10条记录的时候,中间缺少6,7,8的ID号,如果大于5取5条,很明显就没有5条记录了请教有什么解决方案。谢谢

解决方案 »

  1.   

    用SQL语句的话,很难提高效率。建议在程序中去实现。 在程序中生成5个随机数R1,R2,R3,R4,R5  =  RAND() * (SELECT MAX(tid) FROM threads然后分别用五个单独的SQL语句去 select * from threads order by tid limit R1,1
      

  2.   

    你好,这样也会产生空值
    比如,表里面只有5条记录的情况,随机数是6,SELECT * FROM a LIMIT 6,1;这样就没有值了
    不知道是我理解错了你的意思还是,请指教
      

  3.   

    R5 = RAND() * (SELECT MAX(tid) FROM threads
    你的6是怎么得来的?
      

  4.   

    有这种可能,但你完全可以在你的程序中来控制这个,生成5个小于 (SELECT MAX(tid) FROM threads的且不重复的整数应该不是什么难题吧。
      

  5.   

    应该是我理解错了
    代码如下
    for($i=0;$i<5;$i++){
    $query1 = mysql_query("SELECT floor(RAND() * (SELECT MAX(id) FROM a))");
    if($row1 = mysql_fetch_array($query1)){
    echo $row1[0].",";

    }生成类似 0,7,8,8,6,
      

  6.   

    ACMAIN_CHM大哥还在吗?
    可以具体指导下,随机5个不重复的ID吗?
      

  7.   

    5个随机数(0,1)之间,
    max(id)你可以select 出来