关于从数据库中调用随机数据的问题,谢谢先!
关于从数据库中调用随机数据的问题,谢谢先!
请问大侠,我想从数据库中调用10个随机数据,可以用SQL语句实现么??
谢谢!
问题点数:20、回复次数:61Top
1 楼weinierxing(一根火柴)回复于 2005-05-11 13:22:49 得分 0
怎么就没有人帮我呢???
郁闷哦~~~~~Top
2 楼weinierxing(一根火柴)回复于 2005-05-11 18:07:21 得分 0
大家帮帮忙啊~~~我很急的~~~
谢谢了!!!Top
3 楼tigerhu76(虎虎)回复于 2005-05-11 19:04:57 得分 0
是从数据库中调用随机数,还是随机从数据库中调用数据?Top
4 楼xmq120(xmq120)回复于 2005-05-11 19:21:58 得分 0
简单啊~~~ 把符合条件的记录读到 记录集中 然后用个随机数 在记录集中 随机抽Top
5 楼lawyu(雨淋漓)回复于 2005-05-11 19:32:10 得分 0
sql的where条件查询随机数不就行了Top
6 楼weinierxing(一根火柴)回复于 2005-05-11 20:21:22 得分 0
就是利用select 语句实现随机抽取数据Top
7 楼yirengirl(伊人)回复于 2005-05-11 20:24:57 得分 0
做个记号,我也想知道答案。Top
8 楼weinierxing(一根火柴)回复于 2005-05-11 20:26:59 得分 0
使用随机数抽取很麻烦,而且容易出现取不到数据的情况,
或者很难控制以取到预定数量的数据Top
9 楼weinierxing(一根火柴)回复于 2005-05-11 22:55:25 得分 0
请高手帮忙啊!!!Top
10 楼caobin518(linlin)回复于 2005-05-11 22:59:31 得分 0
例如:
select top 10 * from [table] where id()Top
11 楼caobin518(linlin)回复于 2005-05-11 23:03:56 得分 0
收回我的话:
正确写法为:
select top 10 * from [table] order by newid()
或者
select top 10 * from [table] order by rand(id)Top
12 楼caobin518(linlin)回复于 2005-05-11 23:05:09 得分 0
记得给我分呀.我是穷人.哈::)Top
13 楼weinierxing(一根火柴)回复于 2005-05-11 23:27:51 得分 0
后面的条件
where id()
就是表示随机抽取数据么???
我在使用下面的
order by newid()
的时候调试不能通过啊
例子
sql_select3="SELECT TOP "&gdjy_shuliang&" * FROM "&take_name&" where nandu="&take_select3&" ORDER BY NEWID()"
set rs_select3=jiyiconn.execute(sql_select3)
Top
14 楼weinierxing(一根火柴)回复于 2005-05-11 23:30:16 得分 0
哈哈,我调试通过了,肯定给的啊,Top
15 楼weinierxing(一根火柴)回复于 2005-05-11 23:34:37 得分 0
select top 10 * from [table] order by newid()
或者
select top 10 * from [table] order by rand(id)
后面的参数
id
还需要修改么???Top
16 楼mkqiang(扬帆)回复于 2005-05-12 08:50:10 得分 0
做个记号,我也想知道答案Top
17 楼lisoon(http://www.lisoon.com/FlashRss/)回复于 2005-05-12 09:12:53 得分 0
sql server
select top 10 * from [table] order by newid()
在access中可以用,在asp中用不了。
select top 10 * from [table] order by rnd(id)Top
18 楼caobin518(linlin)回复于 2005-05-12 09:30:54 得分 0
select top 10 * from [table] order by rnd(id)
rnd为函数,id为字段
我测试已通过。
Top
19 楼caobin518(linlin)回复于 2005-05-12 09:50:05 得分 0
<%
randomize
for i=1 to 3
rndtemp=rs.recordcount
curorrnd=cint((rndtemp-3+1)*Rnd()+1)
rs.move curorrnd,1
response.write "&rs("articleid")&""&rs("articletitle")&"<br>"
next
%>
这段也通过Top
20 楼jekexys2004(浪傲)回复于 2005-05-12 10:05:25 得分 1
你可以先写一个随机函数,生成10个ID,然后利用这10个id号去数据库中查找出来,如果没有就继续,直到10个数据。Top
21 楼caobin518(linlin)回复于 2005-05-12 10:09:27 得分 0
我觉得: jekexys2004(浪傲) 说的不容易控制生成ID的范围Top
22 楼TSD(智之选,商欲达--智商购物系统zhishop.com)回复于 2005-05-12 10:12:50 得分 0
jekexys2004(浪傲) 的方法才实际可行!Top
23 楼jekexys2004(浪傲)回复于 2005-05-12 11:54:27 得分 0
当然前提是你的ID要有规律,最好是自动排序的Top
24 楼weinierxing(一根火柴)回复于 2005-05-12 12:19:19 得分 0
首先谢谢大家帮忙哦,呵呵!
jekexys2004(浪傲)的方法比较难控制
ID字段在数据库中是很难有什么规律的啊
而且代码相当繁琐的!
我以前用过一次这张方法,最终效果还不是很好的。
我用的是Access+asp+vbscript,难怪都不行的啊,真是郁闷啊!
select top 10 * from [table] order by rnd(id)
这句不能在asp中用?
我再试试下面的哦
<%
randomize
for i=1 to 3
rndtemp=rs.recordcount
curorrnd=cint((rndtemp-3+1)*Rnd()+1)
rs.move curorrnd,1
response.write "&rs("articleid")&""&rs("articletitle")&"<br>"
next
%>
这段也通过
Top
25 楼weinierxing(一根火柴)回复于 2005-05-12 12:39:36 得分 0
要产生指定范围的随机整数,请使用以下公式:
Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
这里, upperbound 是此范围的上界,而 lowerbound 是此范围内的下界。
问
caobin518()
<%
randomize
for i=1 to 3
rndtemp=rs.recordcount
curorrnd=cint((rndtemp-3+1)*Rnd()+1) 这句是什么意思啊,怎么不是cint(rndtemp*Rnd()+1)
rs.move curorrnd,1
response.write "&rs("articleid")&""&rs("articletitle")&"<br>"
next
%>
还有,如果碰到数据库中的空记录怎么处理啊?如何保证得到预设数量的记录呢?
数据存放的是没有什么规律的。
Top
26 楼jekexys2004(浪傲)回复于 2005-05-12 14:54:05 得分 0
还没解决?????????????Top
27 楼cheng17(+天空+)回复于 2005-05-12 15:53:49 得分 0
如果ID号不连续的话,有什么办法解决吗?
如ID号:1,3,4,5,9,10Top
28 楼satans18((何畏)(只要你过得比我好))回复于 2005-05-12 16:29:51 得分 0
sql="select top 10 * from product order by rnd(unid)"
怎么不行,刚刚我都测试成功了
access+aspTop
29 楼lisoon(http://www.lisoon.com/FlashRss/)回复于 2005-05-12 16:34:04 得分 1
blog上不了,不然我的blog里有。。。Top
30 楼cheng17(+天空+)回复于 2005-05-12 16:36:38 得分 0
<%
set rs=conn.execute("select top 3 * from member order by rnd(id)")
Do while not rs.eof
if rs.eof then exit do
response.write rs(0)&"<br>"
rs.movenext
Loop
%>
你刷新页面,出来的记录有变化吗?我这里是没有变化,还是第一次出来的记录Top
31 楼cheng17(+天空+)回复于 2005-05-12 16:39:29 得分 0
to: lisoon((水翡草芥--突然想去扫街))
如果ID号不连续的话,你是用什么办法解决的呢?
如ID号:1,3,4,5,9,10
Top
32 楼lisoon(http://www.lisoon.com/FlashRss/)回复于 2005-05-12 16:50:07 得分 0
思路,先取出所有id,用随机方法,把id打乱,再用id in(1,2,5,8)这样取数据。Top
33 楼lisoon(http://www.lisoon.com/FlashRss/)回复于 2005-05-12 16:53:45 得分 0
http://www.baidu.com/s?wd=%CB%E6%BB%FA%C8%A1%B3%F6n%CC%F5%CA%FD%BE%DD&cl=3
第一条记录便是,不是现在上不了。我也不知道我以前写放在哪了,找不到。。Top
34 楼cheng17(+天空+)回复于 2005-05-12 17:00:55 得分 0
嗯Top
35 楼poonzsp(怒放的生命)回复于 2005-05-12 17:56:08 得分 0
这样的话会有重复的ID`~Top
36 楼cheng17(+天空+)回复于 2005-05-12 18:10:40 得分 0
取出来的记录越多,而表中的记录又少,重复得最利害
如:取5条出来,而表中只有20条记录Top
37 楼weinierxing(一根火柴)回复于 2005-05-12 20:31:00 得分 0
谢谢了
sql="select top 5 * from mytable order by rnd(id)"
调试终于成功,但是.......
<%
set conn=server.createobject("adodb.connection")
conn.connectionstring=connectme
conn.open
set rs=server.createobject("adodb.recordset")
sql="select top 5 * from mytable order by rnd(id)"
set rs=conn.execute(sql)
for i=1 to 5
xx=xx&rs("city_name")&"<br>"
response.write(xx)
next
%>
不知道为什么,接收的数据数目不对啊,郁闷,还是请高手帮忙啊,谢谢了Top
38 楼cqq(脑电波)回复于 2005-05-12 21:09:46 得分 0
oracle 里面狠方便的, sql server的不清楚Top
39 楼weinierxing(一根火柴)回复于 2005-05-12 21:15:25 得分 0
晕哦,我都快结束了,还改,我更不懂了,哈哈Top
40 楼poonzsp(怒放的生命)回复于 2005-05-13 08:59:26 得分 0
<%
set conn=server.createobject("adodb.connection")
conn.connectionstring=connectme
conn.open
set rs=server.createobject("adodb.recordset")
sql="select top 5 * from mytable order by rnd(id)"
set rs=conn.execute(sql)
Do Until rs.eof
xx=xx&rs("city_name")&"<br>"
response.write(xx)
rs.MoveNext
Loop
%>
Top
41 楼poonzsp(怒放的生命)回复于 2005-05-13 09:11:54 得分 0
to cheng17(+天空+(http://ertl.51baby.cn))
天空说说防止重复的WAY`~Top
42 楼satans18((何畏)(只要你过得比我好))回复于 2005-05-13 09:44:38 得分 0
想到了一个方法~~
上面的思路都限制在确定的ID里面
其实我们可以用移动指针的方式
sql="......"
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,1,1
rs.movefirst
randomize
for i=1 to 10 '取十条记录
curorrnd=Int((max-min+1)*Rnd()+min)) '每次移动的范围max到min之间
rst.move curorrnd,1
response.write ""
next
我想这可以达到楼住的要求,效率应该比上面的差
只是这样要根据记录的多少控制没次移动的位数Top
43 楼satans18((何畏)(只要你过得比我好))回复于 2005-05-13 09:49:08 得分 0
不好意思 上面掉了一个不字,效率应该不差Top
44 楼poonzsp(怒放的生命)回复于 2005-05-13 09:57:00 得分 0
上面的方法不行`~Top
45 楼satans18((何畏)(只要你过得比我好))回复于 2005-05-13 10:02:14 得分 0
怎么不行??你测试过吗??
我刚刚试过了,可以得到想要的记录Top
46 楼satans18((何畏)(只要你过得比我好))回复于 2005-05-13 10:03:28 得分 0
注意
移动到指定的位置rs.move,此方法必须配合recordset对象Open方法的cursortype参数一起使用(cursortype参数不可以使用adopenforwardonly的参数值)
recordset.move numrecords,start
numrecords 表示将要移动的数据条数,为正表示往下移动,为负表示向上移动
start 表示指针移动基准点(0、以当前为基准 1、以第一条为基准 2、以最后一条为基准)
Top
47 楼satans18((何畏)(只要你过得比我好))回复于 2005-05-13 10:13:33 得分 2
sql="select * from mytable order by id desc"
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,1,3
if rs.eof and rs.bof then
response.write "没有记录"
else
i=10 '需要取出的记录数
min=0 '移动范围
max=int(rs.recordcount/10) '这样就能保证移动是游标不会越界
rs.movefirst
randomize
for i=1 to i '取十条记录
curorrnd=Int((max-min+1)*Rnd()+min)) '每次移动的范围max到min之间
rst.move curorrnd,1
if rs.eof then exit for
response.write ""
next
end ifTop
48 楼weinierxing(一根火柴)回复于 2005-05-13 12:59:51 得分 0
poonzsp(不以物喜·不以己悲)原帖:
<%
set conn=server.createobject("adodb.connection")
conn.connectionstring=connectme
conn.open
set rs=server.createobject("adodb.recordset")
sql="select top 5 * from mytable order by rnd(id)"
set rs=conn.execute(sql)
Do Until rs.eof
xx=xx&rs("city_name")&"<br>"
response.write(xx)
rs.MoveNext
Loop
%>
为什么我接收到的数目是15个呢??真是晕了啊!高人,你那没有差错么?
代码一样的啊!!!
Top
49 楼weinierxing(一根火柴)回复于 2005-05-13 13:14:54 得分 0
satans18(只要你过得比我好|satan)原帖:
想到了一个方法~~
上面的思路都限制在确定的ID里面
其实我们可以用移动指针的方式
sql="......"
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,1,1
rs.movefirst
randomize
for i=1 to 10 '取十条记录
curorrnd=Int((max-min+1)*Rnd()+min)) '每次移动的范围max到min之间
rst.move curorrnd,1
response.write ""
next
我想这可以达到楼住的要求,效率应该比上面的差
只是这样要根据记录的多少控制没次移动的位数
这种方法好像不行的,如果记录是空的,怎么办?数量又怎么保证啊?Top
50 楼sunshift(http://www.56390.com/)回复于 2005-05-13 13:28:27 得分 0
没有想到这贴这么火热····
SQL我知道:
select top 10 * from [table_name] order by newid()
ACCESS没有试过;
Top
51 楼weinierxing(一根火柴)回复于 2005-05-13 17:59:54 得分 0
回楼上的,在ACCESS中是不行的!
我的帖子还没有人回呢啊,快啊,谢谢先!!!Top
52 楼caobin518(linlin)回复于 2005-05-13 22:50:59 得分 8
刚才睡不着就来上网.还是看到这个问题!而且我的回答糟到别人的否定.
明天上班后我就帮你测试一下.上午10点前发出来.Top
53 楼weinierxing(一根火柴)回复于 2005-05-13 23:20:33 得分 0
好的,谢谢了,我一直在等的啊!!!!Top
54 楼yurui(夏天到了)回复于 2005-05-14 00:51:26 得分 2
<%
set rs=server.createobject("adodb.recordset")
sql="select * from sp"
rs.open sql,conn,1,1
'取得记录总数
count=rs.recordcount
'产生一随机数
Randomize
'inew = Int((count * Rnd) + 1)
inew = Int(count * Rnd)
'移动记录指针,取得记录
rs.move inew
%>
。。。。。
<%
rs("id")
rs("product")
%>
。。。。。
<%
rs.moveFirst
Randomize
inew = Int(count * Rnd)
rs.move inew
%>Top
55 楼weinierxing(一根火柴)回复于 2005-05-14 01:04:26 得分 0
回楼上的,
你的方法也不是很好的,
我的记录不是有规律的,而且会有很多空记录在里面的
比如,id,
id 就是不连续的,中间也有很多空的,
代码运行可能有问题的,就算考虑了,也是很难得到预定的记录数目的。
还是谢谢回帖了,哈哈Top
56 楼weinierxing(一根火柴)回复于 2005-05-14 20:24:47 得分 0
自己再顶一下,谁能帮我哦!!!Top
57 楼caobin518(linlin)回复于 2005-05-14 21:57:03 得分 0
设定不一个字段不为空不就行了。或者定一个主键!Top
58 楼tree_stone(pretty_stone)回复于 2005-05-14 23:51:35 得分 6
这是我写的与你的问题相关的代码,希望对你有参考价值,从10道题中生成5道随机题目,可以完全没有重复题号!!!
'生成随机试卷的单项选择题
response.write("<br>一. <b>单选择</b>(每题"&singleper&"分,共"&singlecount&"题)<br>")
dim seed()
redim seed(singlecount-1)
for i=0 to (singlecount-1)
seed(i)=timer+i
next
for i=0 to (singlecount-1)
'TitleSql="select * from "&exam_db&" where mark=0 and grade='"&grade&"' and type='单选题'"
TitleSql="select * from "&exam_db&" where grade='"&grade&"' and type='单选题'"
set rs=server.CreateObject("ADODB.recordset")
rs.open TitleSql,conn,1,1
count=rs.recordcount
'生成随机题目,randomize初始化随机数生成器,该生成器具有基于系统计时器的种子.生成的随机数范围是[0,(rs.recordcount-1)].
randomize(seed(i))
temp=int(((count-1)-0+1)*Rnd+0)
'把rs的当前位置移动到指定记录temp.
if not rs.eof then
rs.move temp
'rs("mark")=1
response.write( (i+1)&". "&rs("question")&"<br>")
%>
<input type="radio" name="DanXuan<%=rs("id")%>" value="A"> A. <%=rs("text1")%>
<br><input type="radio" name="DanXuan<%=rs("id")%>" value="B"> B. <%=rs("text2")%>
<br><input type="radio" name="DanXuan<%=rs("id")%>" value="C"> C. <%=rs("text3")%>
<br><input type="radio" name="DanXuan<%=rs("id")%>" value="D"> D. <%=rs("text4")%>
<br>
<%
end if
next
%>
<%Top
59 楼weinierxing(一根火柴)回复于 2005-05-15 20:04:20 得分 0
satans18(只要你过得比我好|satan)原帖:
sql="select * from mytable order by id desc"
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,1,3
if rs.eof and rs.bof then
response.write "没有记录"
else
i=10 '需要取出的记录数
min=0 '移动范围
max=int(rs.recordcount/10) '这样就能保证移动是游标不会越界
rs.movefirst
randomize
for i=1 to i '取十条记录
curorrnd=Int((max-min+1)*Rnd()+min)) '每次移动的范围max到min之间
rst.move curorrnd,1
if rs.eof then exit for
response.write ""
next
end if
高人你试了没有啊,我只能得到一个数据啊,郁闷哦,我的一个问题到现在都没有搞定啊~~~~~~
谁能解救我啊!!!!!
最好是调试能通过的啊!谢谢了!!!Top
60 楼weinierxing(一根火柴)回复于 2005-05-15 20:57:26 得分 0
搞定了,采用了
tree_stone(pretty_stone)
的方法
使用预先生成不同随机数的方法
order by rnd(id)方法还是没有通过,
不过还是结帖先了!
只有20分,没有想到有这么多朋友相助,真是十分感谢
还有,没有给分的朋友,我还是同样的谢谢你们!Top
61 楼weinierxing(一根火柴)回复于 2005-05-15 21:01:57 得分 0
晕了,结不了贴了啊
怎么办啊??Top




