asp中随机获得access数据库中的六条数据 不重复
dimrs,sql,isetjrs=server.createobject("adodb.recordset")sql="SELECTtop20*FROM1234WHER...
dim rs,sql,i
set jrs=server.createobject("adodb.recordset")
sql = "SELECT top 20 * FROM 1234 WHERE D_CataID = '12' or D_CataID = '34' order by (d_id)"
rs.open sql,oconn,1,1
do while not rs.eof and i < 6
if (len(rs("tt"))) <> 0 then
%>
<a href="id=<%=rs("ID")%>">
<IMG align=middle alt="come here" border=0 height=75 onmouseout=low(this) onmouseover=high(this) src="<%="/"&replace(jrs("tt"),"..","")%>" width=80 title="<%=rs("title")%>" style="border:1px solid #FFFFFF; FILTER: alpha(opacity=30)"></a>
<%
i = i + 1
end if
rs.movenext
loop
rs.close
这个不是随机的 需要改成随机的 展开
set jrs=server.createobject("adodb.recordset")
sql = "SELECT top 20 * FROM 1234 WHERE D_CataID = '12' or D_CataID = '34' order by (d_id)"
rs.open sql,oconn,1,1
do while not rs.eof and i < 6
if (len(rs("tt"))) <> 0 then
%>
<a href="id=<%=rs("ID")%>">
<IMG align=middle alt="come here" border=0 height=75 onmouseout=low(this) onmouseover=high(this) src="<%="/"&replace(jrs("tt"),"..","")%>" width=80 title="<%=rs("title")%>" style="border:1px solid #FFFFFF; FILTER: alpha(opacity=30)"></a>
<%
i = i + 1
end if
rs.movenext
loop
rs.close
这个不是随机的 需要改成随机的 展开
6个回答
2010-11-09
展开全部
方法1、
sql语句的随机函数:
sql = "SELECT top 6 * FROM [1234] WHERE D_CataID = '12' or D_CataID = '34' and len(tt)<>0 order by (rnd(d_id))"
len(tt)<>0的实现还可: and (tt<>"" and not isnull(tt))
方法2、
rs.open sql,oconn,1,1
RecordCount=rs.RecordCount
ss=""
Randomize
for i=1 to 6
ss=ss & "," & int(rnd*RecordCount)
next
arr=split(mid(ss,2),",")
for i=0 to ubound(arr)
rs.move arr(i),1
'执行你的其他操作,
next
rs.close
方法3、
rs.open sql,oconn,1,1
RecordCount=rs.RecordCount
ss=""
Randomize
for i=1 to 6
ss=ss & "," & int(rnd*RecordCount)
next
rs.close
sql= "SELECT * FROM [1234] where d_id in (" & mid(ss,2) & ") order by d_id"
执行rs.open sql,oconn,1,1 及以后的操作。
以上代码的实现都需要把len(rs("tt")) <> 0的判断放在sql语句内,否则,6条随机记录可能最后显示不够6条。
方法2、方法3:
1、未考虑序号重复的问题,
2、方法2还未考虑d_id的order问题,
这都是很简单的,修改一下即可。
sql语句的随机函数:
sql = "SELECT top 6 * FROM [1234] WHERE D_CataID = '12' or D_CataID = '34' and len(tt)<>0 order by (rnd(d_id))"
len(tt)<>0的实现还可: and (tt<>"" and not isnull(tt))
方法2、
rs.open sql,oconn,1,1
RecordCount=rs.RecordCount
ss=""
Randomize
for i=1 to 6
ss=ss & "," & int(rnd*RecordCount)
next
arr=split(mid(ss,2),",")
for i=0 to ubound(arr)
rs.move arr(i),1
'执行你的其他操作,
next
rs.close
方法3、
rs.open sql,oconn,1,1
RecordCount=rs.RecordCount
ss=""
Randomize
for i=1 to 6
ss=ss & "," & int(rnd*RecordCount)
next
rs.close
sql= "SELECT * FROM [1234] where d_id in (" & mid(ss,2) & ") order by d_id"
执行rs.open sql,oconn,1,1 及以后的操作。
以上代码的实现都需要把len(rs("tt")) <> 0的判断放在sql语句内,否则,6条随机记录可能最后显示不够6条。
方法2、方法3:
1、未考虑序号重复的问题,
2、方法2还未考虑d_id的order问题,
这都是很简单的,修改一下即可。
展开全部
按要求读出数据库中的六条数据付值给一个数组,再用随机数读取数组就行,哪不明白,。HI我
do while not rs.eof
i =i+1
array(i)=rs(0)
rs.movenext
sjs=array(int(rnd()*6)) '随机数
do while not rs.eof
i =i+1
array(i)=rs(0)
rs.movenext
sjs=array(int(rnd()*6)) '随机数
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
思路:
先获得数据库中记录ID号并取得总记录数。
随机在这些ID中抽取六个ID号。组成一个用“,”相连的字符串(ID号符合数据库规定)。
然后就是从数据库中把这些ID对应的数据记录取出来。
关键在于所抽取的随机数所代表的ID在数据库中存在,所以每抽取一个就要判断一次,并且与已经抽取到的ID比较是不是重复。
算法明确了,写代码就简单了。
先获得数据库中记录ID号并取得总记录数。
随机在这些ID中抽取六个ID号。组成一个用“,”相连的字符串(ID号符合数据库规定)。
然后就是从数据库中把这些ID对应的数据记录取出来。
关键在于所抽取的随机数所代表的ID在数据库中存在,所以每抽取一个就要判断一次,并且与已经抽取到的ID比较是不是重复。
算法明确了,写代码就简单了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
SQL按随机排序:
SELECT top 6 * FROM 1234 WHERE D_CataID = '12' or D_CataID = '34' order by rnd(ID);
参见这篇文章:http://hi.baidu.com/godist/blog/item/9c137bef2a968e3aadafd50f.html
SELECT top 6 * FROM 1234 WHERE D_CataID = '12' or D_CataID = '34' order by rnd(ID);
参见这篇文章:http://hi.baidu.com/godist/blog/item/9c137bef2a968e3aadafd50f.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
ASP获得随机数最好的方法,并不是直接用SQL语句的order by rnd(d_id)这样子,因为这样的话还是会重复的。只能结构ASP的随机函数来配合进行。
以下是我在项目中(外贸网店)用的方法,不会重复,速度快效率高:
Randomize(Timer()) '这句是用当前服务器时间做为随机种子数,由此保证绝对不会产生重复值
set rs=conn.execute("select top 6 * from 表名 where 查询条件 order by rnd(-(id+"&rnd()&")) desc")
其中的id你可以替换成你的数据库的自动编号字段
补充:楼下的不知道就别乱说。
是谁说数据库没有rnd这个函数的?楼主用的access数据库,access就是有rnd这个函数的。
我N个asp+access的外贸网店都用得好好的,你竟然说没这函数。真晕。
以下是我在项目中(外贸网店)用的方法,不会重复,速度快效率高:
Randomize(Timer()) '这句是用当前服务器时间做为随机种子数,由此保证绝对不会产生重复值
set rs=conn.execute("select top 6 * from 表名 where 查询条件 order by rnd(-(id+"&rnd()&")) desc")
其中的id你可以替换成你的数据库的自动编号字段
补充:楼下的不知道就别乱说。
是谁说数据库没有rnd这个函数的?楼主用的access数据库,access就是有rnd这个函数的。
我N个asp+access的外贸网店都用得好好的,你竟然说没这函数。真晕。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
rnd是asp的一个随即函数,但是sql中并无此函数,故,你的这个sql语句是有问题的。
你可以这样写
<!-- #include file="conn.asp" -->
<%
set rs=server.CreateObject("adodb.recordset")
rs.open "select top 1 id from url order by id desc",conn,1,1
if not rs.bof and not rs.eof then
maxid=rs("id")
rs.close
function suiji()
Randomize
suiji=Int((maxid - 1+ 1) * Rnd + 1)
end function
'然后开始随即提取记录
i=0
do while i<1
rs.open "select * from url where id="&suiji(),conn,1,1
if not rs.bof and not rs.eof then
i=i+1
response.write "你现在随即提取的记录的id是"&rs("id")
end if
rs.close
loop
%>
这样不就随即提取出来了一个了?呵呵是不是很简单?当然,这个东西如果你随即提取一条是不成问题的,如果提取多条,很可能会有重复显示的现象,那么,如何来让他在提取多条记录时不重复呢?哎,自己多想想吧哈哈,这是我年前写过的小程序了。
请参考
你可以这样写
<!-- #include file="conn.asp" -->
<%
set rs=server.CreateObject("adodb.recordset")
rs.open "select top 1 id from url order by id desc",conn,1,1
if not rs.bof and not rs.eof then
maxid=rs("id")
rs.close
function suiji()
Randomize
suiji=Int((maxid - 1+ 1) * Rnd + 1)
end function
'然后开始随即提取记录
i=0
do while i<1
rs.open "select * from url where id="&suiji(),conn,1,1
if not rs.bof and not rs.eof then
i=i+1
response.write "你现在随即提取的记录的id是"&rs("id")
end if
rs.close
loop
%>
这样不就随即提取出来了一个了?呵呵是不是很简单?当然,这个东西如果你随即提取一条是不成问题的,如果提取多条,很可能会有重复显示的现象,那么,如何来让他在提取多条记录时不重复呢?哎,自己多想想吧哈哈,这是我年前写过的小程序了。
请参考
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询