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]