发现按caotian2000的说法做的话,效果可以出来,就是效率不行啊 @_@ session_start(); session_register("hasview"); if($hasview==""){ session_register("hasview"); $hasview=","; } $photo=""; $b="n"; //取得数据总条数 $sql="select * from member"; $result=mysql_query($sql,$db); $num_rows = mysql_num_rows($result); //如果全部数据已经显示完成,则清楚hasview $ar=split(",",$hasview); if(count($ar)>$num_rows){ $hasview=""; } echo $hasview; //搜索数据 while($b=="n"){ $sql="SELECT * FROM member AS r1 JOIN (SELECT ROUND(RAND()* (SELECT MAX(id) FROM member)) AS id) AS r2 WHERE r1.id >= r2.id ORDER BY r1.id ASC LIMIT 1"; $result=mysql_query($sql,$db); if($myrow=mysql_fetch_array($result)){ $photo=$myrow["photo"]; } $ar=split(",",$hasview); if(in_array($photo, $ar)) { $b="n"; }else{ $b="y"; $hasview.=$myrow["photo"].","; } }
Get all the ids into an array, then use array_rand() and array_splice() to get a rand id and delete from the array. Get the data of the random id from db.
在php中,用它的数组就可以实现的,就是一个容器的的概念,写过类似的算法。等我忙完写写看
$sql="SELECT * FROM member AS r1 JOIN (SELECT ROUND(RAND()* (SELECT MAX(id) FROM member)) AS id) AS r2 WHERE r1.id >= r2.id ORDER BY r1.id ASC LIMIT 1";=========================================== 为什么这么写$sql="select * from member where id not in ( ".trim($hasview,',')." ) order by rand() limit 1 " 然后一个fetch不就可以了吗?
操作过的id:(1,2,3,..) 出一条数据... and id not in (1,2,3,...)
session_start();
session_register("hasview");
if($hasview==""){
session_register("hasview");
$hasview=",";
}
$photo="";
$b="n";
//取得数据总条数
$sql="select * from member";
$result=mysql_query($sql,$db);
$num_rows = mysql_num_rows($result);
//如果全部数据已经显示完成,则清楚hasview
$ar=split(",",$hasview);
if(count($ar)>$num_rows){
$hasview="";
}
echo $hasview;
//搜索数据
while($b=="n"){
$sql="SELECT * FROM member AS r1 JOIN (SELECT ROUND(RAND()* (SELECT MAX(id) FROM member)) AS id) AS r2 WHERE r1.id >= r2.id ORDER BY r1.id ASC LIMIT 1";
$result=mysql_query($sql,$db);
if($myrow=mysql_fetch_array($result)){
$photo=$myrow["photo"];
}
$ar=split(",",$hasview);
if(in_array($photo, $ar)) {
$b="n";
}else{
$b="y";
$hasview.=$myrow["photo"].",";
}
}
为什么这么写$sql="select * from member
where id not in ( ".trim($hasview,',')." )
order by rand()
limit 1
"
然后一个fetch不就可以了吗?
出一条数据... and id not in (1,2,3,...)