2

重複の可能性:
SQL でランダムな行を要求する方法は?

現在使用中:

$randomQuery = mysql_fetch_row(mysql_query("SELECT * FROM `table` WHERE `id` >= RAND() * (SELECT MAX(`id`) FROM `table`) LIMIT 1"));

テーブル構造:

id:
 2 
 4
 5

既存の行を選択していることを確認したい。たとえば、ランダム化関数で 1 または 3 を使用できないようにする必要があります。MySQLでこれを行う方法はありますか?

4

4 に答える 4

8

おもう

SELECT * FROM table ORDER BY RAND() LIMIT 1

トリックを行うでしょう。

見る:

http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_rand

于 2012-06-22T12:02:00.890 に答える
4
SELECT * FROM table ORDER BY RAND() LIMIT 1
于 2012-06-22T12:00:59.877 に答える
1
SELECT * FROM `table` ORDER BY RAND() LIMIT 0,1;

http://akinas.com/pages/en/blog/mysql_random_row/

于 2012-06-22T12:06:09.233 に答える
0

最初のクエリは、行のIDを計算したランダムな値と比較するだけで、ランダムなIDを持つ行をフェッチしようとしないため、穴を処理します

その問題は、不均一な確率を与えることです。大きな穴に続く行は、選択される確率が高くなります。

ORDER BY RAND()これが、ランダム化がほぼ均一になるため、mysqlトリック(他の回答を参照)を使用することが推奨される理由です。

于 2012-06-22T12:14:30.547 に答える