2012-03-28 99 views
0

我想要使用“按顺序排列替代”查询(底部)来获得随机结果集,但我想从查询结果中获得这些结果,例如:从子查询中选择优化的随机结果

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

我需要限制随机结果的数量。 我不能完全理解我需要使用的语法,非常感谢任何帮助。

感谢

“ORDER BY兰特另类” 查询:

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 2012-03-28 16:29:41

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中删除了参数,否则我的输出总是相同的。