mysql:6339
From: "城" <"城" <sora_iro@xxxxxxxxxx>>
Date: Mon, 7 Oct 2002 06:20:38 +0900
Subject: [mysql 06339] servlet では order by rand() ができない?
いつもROM、たまに発言の 城です。 今回テーブルから無作為にデータを取得することがしたくて 以下のようなことをして見ました。 DBに接続する → クエリを作る。 String query = "select * from Asa order by rand()"; このクエリを送信しても単一の結果しかかえって来ません>< order by rand()をサポートしてるバージョン3.23.52を使っているのですが。。 ちなみにテストとしてコマンドラインで上のqueryを実行しましたところ、 ちゃんとランダムの値が返ってきます。 System.out.println(query); としてもちゃんと上のqueryが送信されているようです。 どなたか同じような状況に陥ったことのあるかた、 また解決策をご存知の方、 ご指導お願いします。 解決というか回避策なんですが、 Java.util.Randomを使い まず query ="select Count(tango) from Asa"; として、カウントを取得して それを int num = new Random().nextInt(取得したレコード数); query = "select * from Asa order by rand()"を送信してResultSet rsに代入 して、 int i = 0; while(rs.next()){ if(i == num){ String aisatsu = rs.getString("tango"); break; } } これでできるのですが、レコードが増えれば増えるほど ループの回数が増えるので処理が遅くなってしまいます。 当初の方法で実行したい!!! よろしくお願いします! 実験できるようにソースを書いておきます。 import java.sql.*; public class Aisatsu{ public static void main(String args[]){ try { Class.forName("org.gjt.mm.mysql.Driver"); //コネ クタの呼び出し // データベースへ接続 ResultSet rs; Connection con = DriverManager.getConnection("jdbc:mysql://localhost/Aisatsu"); Statement stmt = con.createStatement(); //検索クエリ送信 String query = "select * from Asa order by rand() limit 1"; rs = stmt.executeQuery(query); System.out.println(query); rs.next(); String resTag = rs.getString("tango"); stmt.close(); con.close(); System.out.println(resTag); } catch (Exception e) { e.printStackTrace(); } } } ----------------------------- 城 sora_iro@xxxxxxxxxx
-> 6339 2002-10-07 06:20 ["城" <sora_iro@xxxxx] servlet では order by rand() ができない? 6343 2002-10-07 18:27 ┣["Takashi Yamashita" ] 6344 2002-10-07 18:30 ┃┗["Takashi Yamashita" ] 6347 2002-10-07 19:44 ┃ ┗["城" <sora_iro@xxxxx] 6348 2002-10-07 21:17 ┃ ┣["Takashi Yamashita" ] 6350 2002-10-07 22:25 ┃ ┗[Satoshi Komori <sato] 6352 2002-10-08 07:12 ┃ ┗["城" <sora_iro@xxxxx] 6353 2002-10-08 12:06 ┃ ┗[Takeyuki Miyagawa <m] 6361 2002-10-08 17:54 ┃ ┗["城" <sora_iro@xxxxx] 6362 2002-10-08 18:15 ┃ ┗["kosugi" <kosugi@xxx] 6346 2002-10-07 19:05 ┣["kosugi" <kosugi@xxx] 6349 2002-10-07 21:26 ┣["Takashi Yamashita" ] 6363 2002-10-08 18:59 ┣[<rio-t@xxxxxxxxxx> ] 6380 2002-10-09 21:42 ┃┗["城" <sora_iro@xxxxx] 6382 2002-10-09 22:58 ┗["小川 修" <shuogawa] 6392 2002-10-10 13:17 ┗["kosugi" <kosugi@xxx] 6424 2002-10-13 00:28 ┗["shuogawa" <shuogawa] 6425 2002-10-14 00:05 ┗[Tomoyuki Ishino <ish]