[前][次][番号順一覧][スレッド一覧]

mysql:6346

From: "kosugi" <"kosugi" <kosugi@xxxxxxxxxx>>
Date: Mon, 7 Oct 2002 19:05:07 +0900
Subject: [mysql 06346] Re: servlet では order by rand() ができない?

小杉です。

order by rand() できない理由は私にはわかりませんが、
TOMCAT 3.2.4
MySQL 3.23.49
では、サーブレット経由でも、JSPでも、order by rand()は正常に働
いています。
select * from base order by rand() limit 1
で、ランダムにレコードをひとつだけ取得できました。

--
Tomoaki Kosugi
kosugi@xxxxxxxxxx


----- Original Message -----
From: "城" <sora_iro@xxxxxxxxxx>
To: <ml@xxxxxxxxxx>
Sent: Monday, October 07, 2002 6:20 AM
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]