今天做一个PHP抽奖活动的功能,所以要读取MYSQL随机N条记录。功能要求:分名次,一等奖3名,二等奖5名,三等奖12名;正3个是分别抽取使用:SELECT * FROM yjwd WHERE fen='16' ORDER BY RAND() LIMIT 3但是抽取完一等奖 再抽取二等奖的时候怎么把一等奖的数据屏蔽,不再抽取?
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语句
$id=3;//得奖id $sqlstring="and user_id<>".$id;SELECT * FROM yjwd WHERE fen='16' $sqlstring ORDER BY RAND() LIMIT 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";
用sql语句实现,正如上面各个楼所说的那样。
sql语句没法实现的,多个sql语句好像是没法共享状态的,你可以将抽取的id保存下载,下次使用时用not in 就可以了
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语句
$id=3;//得奖id
$sqlstring="and user_id<>".$id;SELECT * FROM yjwd WHERE fen='16' $sqlstring ORDER BY RAND() LIMIT 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";