ランダムでデータ取得したい

このQ&Aのポイント
  • VBScriptを使用して、データベースからランダムにデータを取得するプログラムの作成方法について教えてください。
  • プログラム内でランダムな値を生成するためには、Randomize関数を使用し、Rnd関数を使ってランダムなインデックスを生成します。
  • ただし、配列に重複するデータが含まれる可能性があるため、選択された値が既に使用されているかどうかを確認してください。
回答を見る
  • ベストアンサー

ランダムでデータ取得したい

こんばんは。 初歩的なことなんですがどうしても解決できないので書き込みしました。 VBScriptで検索結果をランダムで取得し、 表示するプログラムを作成してみたんですが うまく動作しません。 以下がソースです。 SQL = "" SQL = SQL & "select NAME" & vbCrlf SQL = SQL & " from TBL" & vbCrlf '実行 Set rs = conn.Execute(SQL) 'レコードカウント取得~検索結果14件 rsCnt = rs.RecordCount 'ここで変数を最大値で設定できないのでしょうか? 'ためしに実数(今回は14)を挿入すると動作しました。 '理想はrs.RecordCountで配列指定したいのですができないです。 'これをするとrs.RecordCountに-1が返ってきてエラーが出ます。 ReDim strName(rsCnt) '1から14の配列を取得する intIdx=1 Do until rs.Eof strName(intIdx)=rs("NAME") intIdx=intIdx+1 rs.MoveNext Loop 'データ表示 For intCnt = 1 to rsCnt 'この中でRnd関数を使ってみました。 '配列で実数を使用した場合、ここまで来るのですが 'その結果をランダムで表示したかったので 'RandomizeとRnd関数を使用しましたが '重複データが出てきてしまいます。 ' Randomize index=Rnd*rsCnt+1 以上なんですが解決方法があれば 是非ご指導お願いします。 Takeshi Takahashi 2002/02/06

質問者が選んだベストアンサー

  • ベストアンサー
  • mann555
  • ベストアンサー率46% (29/62)
回答No.1

↓のように辞書配列を用いれば出来ますよ。 Set dictData = Server.CreateObject("Scripting.Dictionary") Randomize do while dictData.count <> 14 index=Int((14) * Rnd) + 1 if Not dictData.Exists(index) Then dictData.Add index,strName(index) loop akeys = dictData.keys for i = 0 to dictData.count - 1 Response.Write dictData.item(akeys(i)) & <BR> Next

その他の回答 (1)

  • mann555
  • ベストアンサー率46% (29/62)
回答No.2

補足です 「Execute」メソッドを実行しても Recordset は返されません 「OpenRecordset」メソッドで行ってください

関連するQ&A

  • プレインPHPでのSQL検索結果取得

    初心者の質問ですみません。 フレームワークをずうっと使って来たのですが、フレームワークを使わずに検索をしようとしたところ、全く思うようにいかず困っています。 SELECT * FROM table のような単純なSQL文なのですが、PEARを使って $sql = "SELECT * FROM table"; $result = $conn->query($sql); としvar_dumpしてみると、期待していたSQLのデータが表示されません。 フレームワークを使っていると、この時点でどのフレームワークでもきれいに連想配列で表示できていました。 その辺が、フレームワークのフレームワークたるゆえんなのでしょうか..... ただ、結果は取得できているようで、 $count = $result->numRows(); としてやると正しい件数が表示されますし、カラム名を指定して while($rs = $result->fetchRow(DB_FETCHMODE_ASSOC)){ echo $rs['column_name']; } としてやるとカラムの値を表示します。 やりたいこととしては、検索結果を連想配列で取得し、foreachで行ごとに処理を行うことで、whileで$rs['column_name']を取得できることから、最悪でも力技で行ごとにカラム情報を全て取得して配列を作ってやることはできるとは思うのですが、もっと良い方法が無いはずがないと思います。 教えていただけますでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 取得データの置き換え方法

    SQL文で取得した情報(ID)を、文字列に変えてまた配列に戻したいのですがどのようにすればいいのかわかりません。 以下で、A.CODEで取得する値は1、2、3というようなIDになります。 この情報を、$siteに入れる際に、「1なら北海道」「2なら東北」というように入れ替えてやりたいのです。 直接情報を入れ替える方法や、別の配列に入れ替えてそれを$siteに入れる等、方法はあると思うのですが、どうしたらいいかわかりません。 よろしくお願いします。 $sql="select A.AREA_ID,A.NAME,A.CODE"; $line = mysql_num_rows($rs); $rs = mysql_query($sql,$db); for($j=0;$j<$line;$j++) { $row = mysql_fetch_row($rs); $site = "$row[1],$row[2],";

    • ベストアンサー
    • PHP
  • 次データ取得エラーについて

    sea_clear_sky8です。 [環境] OS 98SE PWS [質問内容] SQL CMD.CommandText = "SELECT * from test_t" このSQLだと下記のソースの部分が通り、データを表示 させることができます。 でも、 SQL CMD.CommandText = "select * from test_t " & _ "where name like '%" & Request("nm") & "%' " & _ "order by id " & _ "limit " & Request("page_num")*10 & ",10" だと次データ取得エラーと表示され、エラー番号3251が表示され 二つ目のデータから取得できません。 忙しいところすいませんが、ご教授願います。 エラー番号等で、インターネットで調べましたが、原因がわからない 状態です。よろしくお願いします。 [ソース] Do UntiL RS.EOF=true For i = 0 to RS.Fields.Count-1 Response.write RS(i).name k = RS(i).name + CSTR(RS.bookmark) Response.write "<input name="&k&" value="&RS(i)&">" next Response.write "<BR>" RS.MoveNext Loop

  • データベースから取得したデータを配列に格納できません。

    jTableにSQL文の結果を表示させようとして結果を以下のように配列に 格納しようとしました。 public String[][] Serch(){ int i=0; String[][] rowData; String str = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=helloTable.mdb"; try { // ドライバクラスをロード Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // データベースへ接続 Connection con = DriverManager.getConnection(str, "", ""); // ステートメントオブジェクトを生成 Statement stmt = con.createStatement(); String sql = "SELECT * FROM ハローテーブル"; ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ // NOを取得 String no = String.valueOf(rs.getInt("NO")); // 言語を取得 String lang = rs.getString("言語"); // メッセージを取得 String msg = rs.getString("メッセージ"); rowData[i][0] = no; rowData[i][1] = lang; rowData[i][2] = msg; i++; } stmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } return rowData; } このメソッドで得た配列を表示させようとすると以下の結果が表示されます。 java.lang.NullPointerException 正常なSQL文の結果は以下の通りです。 1 日本語 こんにちは世界 2 英語 Hello World 3 ドイツ語 Hallo Welt 配列の行数はSQL文の結果の行数に合わせたかったのですがうまくいきません。 どのように直せばSQL文の結果を配列にすべて格納できるでしょうか?

    • ベストアンサー
    • Java
  • 複数のランダムクイズの表示がうまくいきません・・・。

    以下のようなプログラムを作成しましたが、表示が思うようにいきません。。 本当なら複数の問題をランダムで5問ずつ表示したいのですが、すべて表示することができず、1問のみだったり、3問のみしか表示されなかったりとバラバラです。 記述方法が悪いのでしょうか?どなたか分かる方いらっしゃいましたらご教授お願いします。 ------------------------- <% accessdb="cityquiz" cn="DRIVER={Microsoft Access Driver (*.mdb)};" cn=cn & "DBQ=" & server.mappath(accessdb) set rs = Server.CreateObject("ADODB.Recordset") sql = "select * from quiz" rs.Open sql, cn, 1, 3 total_records=rs.recordcount randomize random_number=int(rnd*total_records)+1 rs.MoveFirst do while not rs.eof and counter <> random_number counter = counter + 1 if counter= random_number then response.write rs("問題") & "<br>" response.write "<input type='radio' name='Q1' vakue='" & rs("ID") & "1'>" & rs("1択") & "<br>" response.write "<input type='radio' name='Q1' vakue='" & rs("ID") & "2'>" & rs("2択") & "<br>" response.write "<input type='radio' name='Q1' vakue='" & rs("ID") & "3'>" & rs("3択") & "<br>" response.write "<input type='radio' name='Q1' vakue='" & rs("ID") & "4'>" & rs("4択") & "<br>" response.write "<br>" end if counter2 = counter + 2 if counter2= random_number then response.write rs("問題") & "<br>" response.write "<input type='radio' name='Q2' vakue='" & rs("ID") & "1'>" & rs("1択") & "<br>" response.write "<input type='radio' name='Q2' vakue='" & rs("ID") & "2'>" & rs("2択") & "<br>" response.write "<input type='radio' name='Q2' vakue='" & rs("ID") & "3'>" & rs("3択") & "<br>" response.write "<input type='radio' name='Q2' vakue='" & rs("ID") & "4'>" & rs("4択") & "<br>" response.write "<br>" end if counter3 = counter + 3 if counter3= random_number then response.write rs("問題") & "(3)<br>" & counter3 response.write "<input type='radio' name='Q3' vakue='" & rs("ID") & "1'>" & rs("1択") & "<br>" response.write "<input type='radio' name='Q3' vakue='" & rs("ID") & "2'>" & rs("2択") & "<br>" response.write "<input type='radio' name='Q3' vakue='" & rs("ID") & "3'>" & rs("3択") & "<br>" response.write "<input type='radio' name='Q3' vakue='" & rs("ID") & "4'>" & rs("4択") & "<br>" response.write "<br>" end if ~略~ rs.movenext loop %>

  • 数千の配列をランダムに並べて表示

    数千の配列をランダムに並べて表示させるプログラムを作りたいと思っています。プログラムはPHPを考えています。 例えば配列数を1000だとすると $file_name[0] = "files0"; $file_name[1] = "files1"; $file_name[2] = "files2"; $file_name[3] = "files3"; $file_name[4] = "files4"; ・・・ $file_name[999] = "files999"; だとします。この配列からランダムに重複無く表示したいと思っています。出力例として、 files3 files328 files1 files32 ・・・ files473 とこんな感じです。私の考えたアルゴリズムではランダムの数字を出力し、その配列が表示されていれば再度ランダムな数字を算出、配列が表示されていなければ表示し、配列が表示されたというフラグを付けます。 しかし、この方法だと最初はスムーズに出てくるのですが、最後にはなかなか出力されないようになります。当然といえば当然ですが。 アルゴリズムだけでも、ご存知の方ご教授いただけると幸いです。

    • ベストアンサー
    • PHP
  • 多次元配列で特定キーが重複している箇所をランダムで

    PHP多次元配列で特定キーが重複している箇所をランダムで1つだけ表示したい ・id基準 ■元配列 Array (   [0] => Array     (       [id] => 5       [name] => "佐藤"       [age] => 5     )   [1] => Array     (       [id] => 5       [name] => "伊藤"       [age] => 7     )   [2] => Array     (       [id] => 5       [name] => "鈴木"       [age] => 12     )   [3] => Array     (       [id] => 8       [name] => "山田"       [age] => 17     )   [4] => Array     (       [id] => 8       [name] => "奈良"       [age] => 2     ) ■取得したいランダム結果配列例1 Array (   [0] => Array     (       [id] => 5       [name] => "佐藤"       [age] => 5     )   [3] => Array     (       [id] => 8       [name] => "山田"       [age] => 17     ) ■取得したいランダム結果配列例2 Array (   [1] => Array     (       [id] => 5       [name] => "伊藤"       [age] => 7     )   [4] => Array     (       [id] => 8       [name] => "奈良"       [age] => 2     ) ※1次元目のキーは元キーを維持していなくても構いません

    • ベストアンサー
    • PHP
  • phpの二次元配列の値をランダムに取得したい

    ちょっとわからないことがありますので、質問させて頂きます。MYSQLから取得したデータ(二次元配列)から、ランダムに値を10件取得したいと思っております。 実際、DBにクエリを投げる段階で、 "select id,name,description from teble order by rand()" をしても、そのテーブルにあるデータ全体から取得という感じになってしまいます。 新しく追加されたデータ10件から、ランダムに取得できないので、新しく追加されたデータ10件をまずDBから取得して、php側でその中からランダムに値を取得するしかないのかと思っております。 shuffle();等を使用したのですが、配列のキーをランダムに取得するような形で、その中身を一緒に取得することができません。 考えても私の知識では解決できませんので、お分かりになる方、ご教授くださいますようお願いいたします。

    • 締切済み
    • PHP
  • array_randの改善・配列からランダムにキーを取得

    配列からランダムに値を取得したい。関数array_randを用いると可能だが、同じ値を繰り返し取得してしまうことがある。この点を改善したい。方法をおしえてください。 (例) 配列 1,2,3,4,5,6,7,8,9 からarray_randでランダムに1つ選ぶ。 1回目、4が選ばれる。array_randの場合、2回目も4が選ばれてしまうことがある。これを4以外の8つの値から1つを選ぶように改善したい。これを繰り返す。最後は配列が空になるようにしたい。 状況 phpを実行する都度、配列は、別ファイルのデータを読み込んで使用している。実行するユーザーの識別が必要でしょうか?

    • 締切済み
    • PHP
  • PDO/カラム値だけを取得したい(配列ではなく)

    PDOで、配列形式ではなく、変数だけを取得したいのですが、 どうすればいいでしょうか? ・取得結果の配列から値を取り出すのではなく、PDOでの取得段階で変数だけを取得したい ・結果は1件しかないという前提 <例> userテーブルで、指定条件(=email)に合致するnameカラム $sql = "SELECT name FROM user WHERE email = :email"; このとき、  Array ( [name] => 伊藤 ) ではなく、  伊藤 だけを取得したいです

    • ベストアンサー
    • PHP

専門家に質問してみよう