有时候需要随机调取数据库里的记录,在页面上随机的显示一些内容,。有些朋友设置随机数,形成数组后,用表里的id来调用。用这种方法调用会出现调用被删除记录的情况。
实际上,如果随机调用n条记录,必须调用有效的数据。以下代码就是随机调用4条记录。调用过程是:首先取得全部数据的id数组,然后根据数组的长度,在数组长度范围内,产生4随机数,再调用数组里的数据,这个数据就是真实存在的id。这样就可以真实的调用存在数据的记录了。
<%
dim srs,str,arr,snum
set srs=server.CreateObject("adodb.recordset")
ssql="select MovieID from Movietable where MovieFlag1=0" '首先调用全部的id。
srs.open ssql,conn,1,1
snum=srs.recordcount
if snum>4 then '如果全部记录条数大于4,才随机调取。
do while not srs.eof
if str="" then '把id写进str。
str=srs("MovieID")
else
str=str&"|"&srs("MovieID")
end if
srs.movenext
loop
arr=split(str,"|") '然后分隔成数组。
'================
for x=1 to 4
randomize()
if xstr="" then
xstr=cint(ubound(arr)*rnd())
else
xstr=xstr&"|"&cint(ubound(arr)*rnd())
end if
next
xrand=split(xstr,"|")
end if
srs.close
set srs=nothing
dim rrs,rsql
set rrs=server.CreateObject("adodb.recordset")
rsql="select MovieID,MovieName,Ssclass,D_Picture from MovieTable where MovieFlag1=0"
if snum<5 then
rsql=rsql&"order by MovieID desc"
else
for j=0 to 3
if j=0 then
rsql=rsql & "and (MovieID="&arr(xrand(j))
else
rsql=rsql & "or MovieID="&arr(xrand(j))
end if
next
rsql=rsql & ") order by MovieID desc"
end if
rrs.open rsql,conn,1,1
do while not rrs.eof
%>
<li style="float:left; width:110px"><table width="90%" height="126" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="103" align="center"><a href="film.asp?id=<%=rrs("MovieID")%>"><img name="" src="<%=rrs("D_picture")%>" width="87" height="94" alt="<%=rrs("ssclass")%>片:<%=rrs("MovieName")%>"></a></td>
</tr>
<tr>
<td align="center"><a style=" color:#333333" href="film.asp?id=<%=rrs("MovieID")%>"><%=left(rrs("MovieName"),7)%></a></td>
</tr>
</table>
</li>
<%
rrs.movenext
loop
rrs.close
set rrs=nothing
%>