设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1145|回复: 8
打印 上一主题 下一主题

[Access本身] asp+access 怎样才能随机抽数据库中的记录?

[复制链接]
跳转到指定楼层
1#
发表于 2009-4-9 01:23:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
asp+access 怎样才能随机抽数据库中的记录?
要求每次抽的都不一样
.
网上有这样的说法
select top 50 * from tab_st order by rnd(id)

但是这样,每次抽的都是一样的,这样毫无意义
.
请高手指点更合适的方法.谢谢

简单高效:不重复随机读取数据库记录

Set rs = Server.CreateObject("Adodb.RecordSet")
rs.open sql,conn,1,1

DIM Appeared
Call DisRndRecord(10,rs.recordCount)'调用函数该位置显示记录


'################SUBS################
'#DisRndRecord(DisNum,rsBound)
'#
参数DisNum:显示数量
'#参数rsBound:随机数产生范围
Sub DisRndRecord(DisNum,rsBound)
DIM i,ThisRnd
If rsBound < DisNum Then DisNum = rsBound'
记录总数小于要抽取记录条数的情况
For i = 0 To DisNum - 1
ThisRnd = GetRnd(rsBound)'
取得一个不重复的随机数
rs.Move(ThisRnd)'游标移动到随机数位置数读取
Response.Write("<br>("&rs("id")&")"&rs("Title"))
rs.Move(-ThisRnd)
Next
End Sub
'#
函数GetRnd(bound)返回一个不重复的随机数字
'#参数bound:随机范围
Function GetRnd(bound)
DIM ranNum
Randomize()
ranNum=int(bound*rnd)
If Instr(Appeared,"["&ranNum&"]") Then'
产生的随机数是否出现过
ranNum = getRnd(bound)
End If
Appeared = Appeared & "["&ranNum&"]"'
记录已出现的随机数
GetRnd = ranNum
End Function

参考资料:http://www.haishui.net/view.php?id=454 set rs=server.CreateObject("adodb.recordset")
sql="select * from 表
"
rs.open sql,conn,1,3'打开数据库表

i=1
dim webon()
do while not rs.Eof'
写入数组
Redim Preserve webon(i)
webon(i)=rs("id")
i=i+1
rs.movenext
loop

randomize'
随机得到记录
p=Int((rs.recordcount*rnd)+1)'在全部记录中生成随机数
rndid=webon(p)

Set rs=conn.Execute("select * from
表 where id="&rndid)'根据数组,再打开相关随机记录.
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2009-4-9 09:25:25 | 只看该作者

假设你的表中有数值型的主键或unique键

SELECT top 10 *
FROM Table2
order by rnd(sin(now()*1000*id))


如果没有这种数值列,则可以通过 日期 转换,字符串转换得到数值再和 NOW()运算 的结果作为rnd的种子。


******************
*  一切皆有可能  *
******************

.
ACMAIN - Access论坛回贴准则(个人).
.

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-22 10:22 , Processed in 0.090545 second(s), 25 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表