如何从数据库中随机取出10条记录?

arcow 2003-12-04 07:09:03
我用
sql="select * from news order by rnd(id)"

但每次刷新结果都是一样,在前面,后面,中间都试着加
randomize
也没用,请大家指教
...全文
370 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
超级大笨狼 2004-02-21
  • 打赏
  • 举报
回复
<SCRIPT LANGUAGE=vbscript >
'洗牌
Dim N,S,D,P
P=52'牌的数量
Set D = CreateObject("Scripting.Dictionary")
do while D.Count<P
Randomize
N=Int(P * Rnd + 1)
if not D.Exists(cstr(N)) then
D.Add cstr(N),cstr(N)
end if
loop
for each K in D.Keys
S=S & K & " "
next
msgbox replace(trim(S)," ",",")
</SCRIPT>
超级大笨狼 2003-12-17
  • 打赏
  • 举报
回复

洗牌完美版:
<SCRIPT LANGUAGE=vbscript >
function xipai(mystr)
xipai=""
if len(mystr)=0 then'如果是空的,那么初试化一付连续的牌
for i=1 to 52
mystr=mystr & "<" & i & "> "
next
end if
dim i,x
for i=1 to 52
myarry=split(mystr) 'myarry是下标52的数组,前0-51个有效
randomize
x=cint(rnd*(ubound(myarry)-1))'前0-51个随便找一个
mystr=replace(mystr, myarry(x) & space(1),"")'从没发的牌中随便挑一张
xipai=xipai & myarry(x) & space(1)
next
end function

function XP(n)
mystr="xipai("""")"
dim i
for i=1 to n
mystr="xipai(" & mystr & ")"
next
XP=eval(mystr)
end function
document.write "洗牌完美版" & "<br/>"
document.write "洗一次牌:" & XP(1) & "<br/>"
document.write "洗两次牌:" & XP(2) & "<br/>"
document.write "洗三次牌:" & XP(3) & "<br/>"
document.write "洗一百次牌:" & XP(100) & "<br/>"
</SCRIPT>

dingyanwei 2003-12-07
  • 打赏
  • 举报
回复
可以用随机数的,不过要有方法。如下:

FromNumber=1 从几开始
ToNumber=10 到几结束

Randomize 初始化随机数发生器
RanNum = Int(((ToNumber - FromNumber + 1) * Rnd) + 1)


本人用vb程序改的。
yeno 2003-12-06
  • 打赏
  • 举报
回复
而且还要写一个循环判断,建议最要建立一个数组,存取随机取得的整数
并且保证没有重复值
yeno 2003-12-06
  • 打赏
  • 举报
回复
注意随机取数的时候
rnd(id)
返回的并不是一个正整数值,要先进行转换再作为查询条件
liwb 2003-12-06
  • 打赏
  • 举报
回复
select top 10 * from news order by id
只能取前10条并不是取随机10条,
我觉得可以这样取
sql="select * from news"
rs.open sql,conn,1,1
record=Int(rs.recordcount*rnd())
rs.move(record)
for i=1 to 10
if rs.eof then
rs.movefirst
end if
''''''''
你的语句
''''''''
rs.movenext
next
arcow 2003-12-06
  • 打赏
  • 举报
回复
难啊
dafei0320 2003-12-06
  • 打赏
  • 举报
回复
关注--
select top 10 * from news order by id
这个不行--
随机-------------
zl9732 2003-12-06
  • 打赏
  • 举报
回复
同意 arcow(冲星);建议用superdullwolf(超级大笨狼) 的方法
angelheavens 2003-12-06
  • 打赏
  • 举报
回复
赞成superdullwolf(超级大笨狼),你的随机抽取这样是不现实的,给你点提示:(1)数据中的记录数可以统计(有了范围Min~Max);
(2)数据库中的记录ID你不能保证一定连续(这就不能单纯用rnd函数);
(3)利用数组等知识点一次读取,多次随机抽取;
loveme2000ok 2003-12-05
  • 打赏
  • 举报
回复
要不,这样也行,
新闻表里一般都有一个日期和时间的字段吧,
你就把这个语句改成如下:
select top 10 * from news order by date_time
这样做没有不行的。
loveme2000ok 2003-12-05
  • 打赏
  • 举报
回复
运用如下语句:
select top 10 * from news order by id
这条语句绝对起作用。
arcow 2003-12-05
  • 打赏
  • 举报
回复
我用的是access,不支持newid
那怎么写函数呢?
smiledragon2002 2003-12-05
  • 打赏
  • 举报
回复
苯狼说的对,作扑克牌游戏就这样的,54张牌,作一数组,随机取13个数组下标
超级大笨狼 2003-12-05
  • 打赏
  • 举报
回复
思路:
打开两次
第一次取出id存到数组里(因为id可能是不连续的)
第二次在数组里随机去一个数字下标对应的id
arcow 2003-12-05
  • 打赏
  • 举报
回复
loveme2000ok(温志成) select top 10 * from news order by id
这样做也不过是把id从小到大排列
select top 10 * from news order by date_time
这样做只是按时间排序
都没起到随机抽取记录的作用
ljupin 2003-12-04
  • 打赏
  • 举报
回复
估计是ACCESS,rnd没办法,自己写函数
ygghost 2003-12-04
  • 打赏
  • 举报
回复
select top 10 * from news order by newid()
DeltaCat 2003-12-04
  • 打赏
  • 举报
回复
你的数据库是什么?

28,407

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧