繁体   English   中英

从子查询中选择优化的随机结果

[英]Select optimised random results from a sub query

我想使用“按rand替代顺序”查询(底部)来获取随机结果集,但我想从查询中从结果中获取它们,例如:

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

而且我需要限制要返回的随机结果的数量。 我不太了解需要使用的语法,非常感谢任何帮助。

谢谢

“按兰德替代订单”查询:

我如何优化MySQL的ORDER BY RAND()函数?

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
SELECT 
      t2.id 
   FROM 
      index_table t1 
         JOIN data_table t2 
            ON t1.id= t2.index_id
   ORDER BY
     RAND()
   LIMIT 5

或您希望通过限制达到的最大条目数

这样的事情行吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM