主题:不好意思,刚来就提问一个随机筛选的问题。
cnbean
[专家分:0] 发布于 2007-10-27 14:35:00
我想要用asp(access)做一个随机筛选的数据,要怎么做··??
我用了很多种方法都不行
<% set rs=conn.execute("select top 5 * from Doc order BY Rnd(id)") %>
搜索出来的数据每次都一样··
我用
<% set rs=conn.execute("select top 5 * from Doc order BY Rnd(now())") %>
也不行··你能帮帮我么??
最后更新于:2007-10-27 14:41:00
回复列表 (共7个回复)
沙发
cnbean [专家分:0] 发布于 2007-10-27 15:26:00
有没有人帮帮忙···怎么解决
??
板凳
wangsdong [专家分:21390] 发布于 2007-10-27 15:34:00
http://blog.programfan.com/article.asp?id=28986
3 楼
cnbean [专家分:0] 发布于 2007-10-27 15:55:00
利用asp随机获取数据库中的记录且不出现重复的记录
<!--#include file="adoconn.asp"-->
<%
'-------------------------检索数据-----------------------
strSQL = "SELECT * FROM [table]"
'Sql语句,检索数据库
'Set objRS = Server.CreateObject("ADODB.Recordset")
'创建记录集
rs.Open strSQL,conn,1,1
'执行检索
Count=rs.RecordCount
'得到记录总数
Item=2
'显示记录数
'-------------------------检索数据-----------------------
'-------------------------------------------------------------------------------
redim a(Item, 3),t(Count)
'定义2数组,数组a用来储存记录,数组t用来删选记录
'---------------------------------------
'初始数组数值,目的为了插入数据以后和此值做比较
for each j in t
j=0
next
'---------------------------------------
'---------------------------------------
' 随机抽取记录号
Randomize timer '初始化随机数生成器
for j=1 to Item
k=int(rnd*Count+1) '从总数里面随机取一条记录
do while t(k)<>0 '判断是否记录是否已经在数组中
k=int(rnd*Item+1)
loop
t(k)=1 '第k条记录被选中
next
'--------------------------------------
j=1:i=1'定义下标
'--------------------------------------
' 循环选取数据集rs中的部分记录存放到数组中
Do While Not rs.Eof
if t(j)=1 then
a(i,1)=rs("y_id") '记录id
a(i,2)=rs("y_start") '字段1
a(i,3)=rs("y_end") '字段2
i=i+1
end if
j=j+1
rs.MoveNext
Loop
'--------------------------------------
'-------------------------------------------------------------------------------
'----------------------------显示内容--------------------
for i=1 to Item
Response.write "序号"&a(i,1)&"<br>"
Response.write "开始"&a(i,2)&"<br>"
response.write "结束"&a(i,3)&"<p>"
next
'----------------------------显示内容--------------------
'---------------------------
'释放资源
rs.Close
set rs=nothing
Conn.Close
set Conn=nothing
'---------------------------
%>
adoconn.asp
<%
set rs=server.CreateObject("adodb.recordset")
db="aaa1.mdb"
set conn=server.CreateObject("adodb.connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db)
conn.open connstr
%>
有没有简练点的??我都被带晕倒了,我最要随机筛选5条纪录就好了,而且每次刷新数据都不一样就好了·
4 楼
wangsdong [专家分:21390] 发布于 2007-10-27 16:01:00
<!--#include file="adoconn.asp"-->
<%
strSQL = "SELECT * FROM [table]"
rs.Open strSQL,conn,1,1
Count=rs.RecordCount
Item=2
redim a(Item, 3),t(Count)
for each j in t
j=0
next
Randomize timer
for j=1 to Item
k=int(rnd*Count+1)
do while t(k)<>0
k=int(rnd*Item+1)
loop
t(k)=1
next
j=1:i=1
Do While Not rs.Eof
if t(j)=1 then
a(i,1)=rs("y_id")
a(i,2)=rs("y_start")
a(i,3)=rs("y_end")
i=i+1
end if
j=j+1
rs.MoveNext
Loop
for i=1 to Item
Response.write "序号"&a(i,1)&"<br>"
Response.write "开始"&a(i,2)&"<br>"
response.write "结束"&a(i,3)&"<p>"
next
rs.Close
set rs=nothing
Conn.Close
set Conn=nothing
%>
不知道这样是不是简单些
5 楼
cnbean [专家分:0] 发布于 2007-10-27 16:04:00
我问题解决了··
Randomize
r = Rnd
set rs=conn.execute("select top 5 * from Doc order BY rnd(" & r & "-id)")
可是我看不懂为什么这样··有人能帮我分析一下么??
这样也可以···
6 楼
tianyu123 [专家分:2570] 发布于 2007-10-28 17:00:00
在使用Rnd函数时,如果没有执行过Randomize命令,
则产生的随机数总是相同的结果!
为了能产生真正意义上的随机数,就需要在使用Rnd之前,执行一次Randomize命令。
Randomize称为随机种子命令,它实际上是用计算机内部时钟的毫秒数当种子,因为各台电脑里时钟毫秒数相同的可能性很小,并且每台电脑的时钟都是在不停的变化,所以执行过Randomize之后,产生的随机数就不相同了。
7 楼
cnbean [专家分:0] 发布于 2007-11-14 08:40:00
问一下
整个table表循环要怎么做??我要整个 <table>…………</table>横向循环·怎么做阿??有没有人能够帮帮我?望高人指点
<table>
<div align="center">
<%sql1="select * from Doc where Week=1 and itime=1 and Section_d='语文'"
set rs1=conn.execute(sql1)
%>
<%If Rs1.eof or Rs1.bof Then
Response.write "没有专家"
Else%>
<table width="90%" border="0" align="center" cellpadding="0" cellspacing="0" class="kuan_xu">
<% while rs1.eof = false %>
<tr>
<td><div align="center"> <%=rs1.fields("name")%> </div></td>
<% rs1.movenext
wend
%>
</tr>
<tr>
<td><div align="right"></div></td>
</tr>
</table>
<%End if%>
</div>
</table>[em10][em10]
我来回复