1
A
答えて
2
SELECT * FROM table WHERE num_value >= RAND() * (SELECT MAX(num_value) FROM table) LIMIT 1
を仕事ができます。 1つの注意点:これは、num_valueが0..MAX(num_value)の範囲で等しく分布していることを前提としています。データセットがこの仮定から大きく外れていると、偏った結果が得られます(一部の行は他の行より頻繁に表示されます)。
+1
ありがとう、それは私が必要としていたものです!私は純粋なPHPでそれをしようとしたが、あなたのアイデアははるかに優れています! –
+0
私の喜び先生 –
2
このようなクエリはnum_valueがインデックス化された場合、これは関係なく、テーブルサイズの、一定の時間で動作します
SELECT * FROM `table` WHERE id >= (SELECT FLOOR(MAX(id) * RAND()) FROM `table`) ORDER BY id LIMIT 1;
テーブルの構造は?何を試しましたか?等。? –
[何を試しましたか?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – Songo