MySQL テーブルからランダムなデータを取得する方法
この問題については以前グループで議論しましたが、mysql の構文は非常に興味深いものです
彼らは当初、PHP を使用してそれを実現したいと考えていました。ランダム性がありますが、複数のレコードが取り出されました。
マニュアルをめくって、タスクを完了できる次のステートメントを見つけました。
SELECT * FROM table_name ORDER BY rand() LIMIT 5;
rand はマニュアルで次のように説明されています:
RAND()
RAND(N)
0 から 1.0 の範囲のランダムな浮動小数点値を返します。整数パラメータ N が指定されている場合、それがシード値として使用されます。
sql>select RAND(); 0.5925
sql>select RAND(20); > 0.1811
sql> select RAND();
- -> 0.2079
sql> select RAND(); ORDER BY は列を再計算します。回。ただし、MySQL3.23 では、 SELECT * FROM table_name ORDER BY RAND() を実行できます。これは、 SELECT * FROM table1,table2 WHERE a=b AND c
しかし、8,000 レコードのテーブルの場合、1 回の実行に 0.08 秒かかり、少し遅いです。
後で Google に問い合わせたところ、次のコードが得られました
SELECT *
FROM table_name AS r1 JOIN
(SELECT ROUND(RAND() *
(SELECT MAX(id)
FROM table_name)) AS id)
AS r2
WHERE r1. id >= r2.id
ORDER BY r1.id ASC
実行効率には 0.02 秒が必要です。残念ながら、このような処理は mysql 4.1.* 以降でのみサポートされます。サブクエリ .