今天做一个PHP抽奖活动的功能,所以要读取MYSQL随机N条记录。功能要求:分名次,一等奖3名,二等奖5名,三等奖12名;正3个是分别抽取使用:SELECT * FROM yjwd WHERE fen='16' ORDER BY RAND() LIMIT 3但是抽取完一等奖 再抽取二等奖的时候怎么把一等奖的数据屏蔽,不再抽取?

解决方案 »

  1.   


    SELECT *
    FROM `info`
    WHERE id >= (
                SELECT FLOOR( MAX(id) * RAND()) 
                FROM `info`
                )
    AND no in (已被选出的id)
    ORDER BY id
    LIMIT 1;你那样效率太低,如何提高效率见http://blog.chinaunix.net/u/8780/showart_430328.html,解答你的问题见上述sql语句
      

  2.   


    $id=3;//得奖id 
    $sqlstring="and user_id<>".$id;SELECT * FROM yjwd WHERE fen='16' $sqlstring ORDER BY RAND() LIMIT 3
      

  3.   


    $id=3;//得奖id 
    $sqlstring="and user_id not in({$id},{$id2},{$id3})";$sql="SELECT * FROM yjwd WHERE fen='16' $sqlstring ORDER BY RAND() LIMIT 3";
      

  4.   

    用sql语句实现,正如上面各个楼所说的那样。
      

  5.   

    sql语句没法实现的,多个sql语句好像是没法共享状态的,你可以将抽取的id保存下载,下次使用时用not in 就可以了