aspでsqlとaccessデータベースをランダムに10本の記録コードnewid()を取ります。
1307 ワード
MSSQL:select トップ 10 * from [テーブル order by newid()ACCESS:
これでいいです。当然、重複した記録が取れるかもしれません。乱数が発生した文を修正すればいいです。一つの変数を宣言して、すでに発生した乱数を保存します。新たな乱数が発生した場合は、すでに発生したかどうかを先に判断して、発生したら再生成すればいいです。これは比較的簡単です。instrなどで解決できます。 考え方はこうです。他の人は自分でやってみましょう。 重複して読み取らない方法は一つの乱数だけを生成して、この乱数の後のN個の記録を順次読み出すことです。もちろん、判定も書きます。乱数は総記録数より小さいです。記録の量を読みます。
' rs.move
' 10
n = 10
' 10, 10, if n>10 rs.recordCount then n=rs.recordCount
dim ranNum
for i = 1 to n
Randomize()
ranNum = int(rs.recordCount*rnd)+1 '
rs.Move ranNum '
response.write i & "-" & rs("title") & "<br />" '
rs.Move -ranNum
next
'……
これでいいです。当然、重複した記録が取れるかもしれません。乱数が発生した文を修正すればいいです。一つの変数を宣言して、すでに発生した乱数を保存します。新たな乱数が発生した場合は、すでに発生したかどうかを先に判断して、発生したら再生成すればいいです。これは比較的簡単です。instrなどで解決できます。 考え方はこうです。他の人は自分でやってみましょう。 重複して読み取らない方法は一つの乱数だけを生成して、この乱数の後のN個の記録を順次読み出すことです。もちろん、判定も書きます。乱数は総記録数より小さいです。記録の量を読みます。
'……
dim n,ranNum
n = 10
Randomize()
ranNum = rs.recordCount-n
if ranNum<1 then ranNum=1
ranNum = int(ranNum*rnd)+1
rs.Move ranNum
for i=1 to 10
response.write i & "-" & rs("title") & "<br />" '
rs.MoveNext '
next
'……
は、乱数を繰り返さないように簡単なFunctionを自分で書くことを提案する。