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]