2011-11-09 2 views
1

が、私は今、このソリューションを持っているところでMySQLからランダムにエントリを選択します。

rs = lState.executeQuery("SELECT FLOOR(RAND() * COUNT(*)) 
     FROM bases 
     WHERE user_id = " + userId + " AND is_valid = 1"); 

rs.next(); 
count = rs.getInt(1); 

rs = lState.executeQuery("SELECT id, server, server_port, server_ssl, 
     server_starttls, server_auth, email, password, auth_wholemail 
     FROM bases LIMIT " + count + ", 1"); 

をしかしFLOOR(RAND() * COUNT(*))is_valid = 1とIDを返さないので、それが仕事ではありませんが。 MySQLのwhith where節(ここではis_valid = 1)からランダムなエントリを素早く選択する方法は?

答えて

6

ORDER BY句を使用してください。これを試してください:

SELECT COUNT(user_id) FROM bases WHERE user_id = " + userId + " AND is_valid = 1 ORDER BY RAND() LIMIT 1 

これは、テーブルから1つのランダムな行を返します。

0

私はあなたがしようとしているものを理解していなかったが、これはあなたを助けるかもしれない(あなたの質問に基づく):

http://www.electrictoolbox.com/msyql-alternative-order-by-rand/:あなたのテーブル内の行の偉大な量で出何

SELECT * 
FROM bases 
WHERE is_valid=1 AND user_id = <user_id> 
ORDER BY RAND() 
LIMIT 1;