我正在使用经典ASP,并且拥有一个包含6,318个随机单词的MySQL表(“j_un2”),总计数永远不会改变。表中的ID是无间隙的。
我需要生成一个由2个单词组成的5个随机连接字符串的列表,其中字符串的总长度为8个字符。
几天前我已经通过以下方式获得了一些非常有用的帮助: Selecting random words from table Optimising SQL to concatenate random words
根据我收到的帮助,我写了这个简单的函数来生成8个字符的随机单词组合:
<%
Function f1(str)
found = "no"
do while found <> "yes"
rand1 = Int((Rnd * 6138) + 1)
rand2 = Int((Rnd * 6138) + 1)
SQL = "SELECT CONCAT(w1.fld_un, w2.fld_un) word FROM j_un2 w1 , j_un2 w2 WHERE w1.fld_id = "&rand1&" AND w2.fld_id = "&rand2&""
set pRS = oConn.Execute(SQL)
word = pRS("word")
if len(word) = str then
found = "yes"
f1 = word
end if
Loop
End Function
for i = 1 to 5
bob = f1(8)
response.write bob & "<br />"
next
%>
它运行得非常快,运行时间不到1秒,非常棒。
但是,它生成的单词总是以相同的顺序 - 例如
digpills
grincost
grownjaw
jonesbin
cloudme
如果我刷新页面,它会以相同的顺序生成单词。我知道表中有数百个单词组合成八个字符长的字符串,所以数据库中的单词不够。
如果我这样做的话这样:
for i = 1 to 5
bob = f1(8)
response.write bob & "<br />"
next
for i = 1 to 5
bob = f1(8)
response.write bob & "<br />"
next
for i = 1 to 5
bob = f1(8)
response.write bob & "<br />"
next
for i = 1 to 5
bob = f1(8)
response.write bob & "<br />"
next
然后它将生成20个随机8个字符的长组合,但同样,这20个组合总是处于相同的顺序。
我不是一个非常聪明的程序员 - 我错过了一些东西,因为每次刷新页面时我都无法弄清楚如何获得完全随机的列表。
答案 0 :(得分:2)
您需要使用“随机化”来每次为您的ID获取不同的数字。
Dim max,min
max=100
min=1
Randomize
response.write(Int((max-min+1)*Rnd+min))
有关它的更多信息here