2012-03-28 22 views
0

ランダムな結果セットを得るために "order by rand alternative"クエリ(下)を使用したいが、結果の中からクエリのようなクエリを取得したい:サブクエリから最適化されたランダムな結果を選択

SELECT t2.id FROM index_table t1 JOIN data_table t2 ON t1.id= t2.index_id 

そして、私が返すランダムな結果の数を制限する必要があります。 私は使用する必要のある構文を頭に浮かべることはできません。

おかげ

"注文ランドの代替による" クエリ:

How can i optimize MySQL's ORDER BY RAND() function?

SELECT * 
FROM (
     SELECT @cnt := COUNT(*) + 1, 
       @lim := 10 
     FROM t_random 
     ) vars 
STRAIGHT_JOIN 
     (
     SELECT r.*, 
       @lim := @lim - 1 
     FROM t_random r 
     WHERE (@cnt := @cnt - 1) 
       AND RAND(20090301) < @lim/@cnt 
     ) i 

答えて

0
SELECT 
     t2.id 
    FROM 
     index_table t1 
     JOIN data_table t2 
      ON t1.id= t2.index_id 
    ORDER BY 
    RAND() 
    LIMIT 5 

または何でもしたいエントリの最大数の制限を経由して

+0

私は最適化された方法を引用し、非効率的であるので、 – DonutReply

0

でしょう何かこの作品のように?

SELECT * 
FROM (
     SELECT @cnt := COUNT(*) + 1, 
       @lim := 10 
     FROM FROM index_table t1 JOIN data_table t2 ON t1.id= t2.index_id 
     ) vars 
STRAIGHT_JOIN 
     (
     SELECT t2.id, 
       @lim := @lim - 1 
     FROM index_table t1 JOIN data_table t2 ON t1.id= t2.index_id 
     WHERE (@cnt := @cnt - 1) 
       AND RAND() < @lim/@cnt 
     ) i 

RANDからパラメータを削除しましたが、それ以外の場合、出力は常に同じでした。