【问题标题】:Mysql - how to random select 1 row in a large repetitive set such that each row had an `equal` chance of selectionMysql - 如何在一个大的重复集中随机选择 1 行,以使每一行都有“相等”的选择机会
【发布时间】:2016-06-12 02:27:53
【问题描述】:

我想弄清楚一个简单的事情:

如何在一个大的repetitive 集合中设置random select 1 行,以使每一行都有equal 的选择机会?

例如,一个产品表,每个产品有多个条目,我只想随机选择 1 个。但是那个'chance''chance'不应该比别人多,因为它是重复的。

一种解决方案是获取唯一列表(使用GROUP BY)并从此子查询中获取RANDOM。但是对于大型数据集,这不是最佳解决方案,这正是我需要帮助的地方。

谢谢。

【问题讨论】:

    标签: mysql random unique


    【解决方案1】:

    也许将行数作为随机数的基础,然后将其用作仅选择 1 行的限制范围的基础。

    例如LIMIT X,1 其中 x 是随机数。

    【讨论】:

    • 所以我计算了唯一行的数量,然后对其进行限制。如何让选中的结果被选中的机会相等?
    • 您将行数输入随机数生成器。它是这样获得的用于 X 的随机数。
    【解决方案2】:

    首先你必须知道它非常简单。你的表中的行数。 (存储在$cnt_row)满足该条件。 然后使用randome(); 函数获取随机数并将该计数行作为参数传递。像这样。

    $row= random($cont_row);
    

    像这样在末尾添加你的随机数进行查询

    limit --$row,1
    

    我希望这对你有用。

    【讨论】:

    • 在您的示例中,random() 函数是哪种语言?
    • 所以我计算唯一行的数量,然后对此进行限制?如何让选中的结果被选中的机会相等?
    • 我使用 php 语言.. 随机函数意味着如果你将值传递为 5,那么它只会返回 1 到 5 之间的变量。 random(5) 它的输出将是 1,2,3,4,5 中的任何一个。
    【解决方案3】:

    你可以试试这个
    1)从你的表中选择不同的记录并创建一个视图

    CREATE VIEW My_View AS SELECT DISTINCT (Col_Name) FROM Table_Name
    

    2) 然后从该视图中随机选择行

    SELECT * FROMMy_ViewORDER BY RAND() LIMIT 1;

    希望它会有所帮助:)

    【讨论】:

    • 在简单的概念上看起来不错,但我有很多动态的参数在运行时基于过滤器添加。所以就变得不可能了。
    • 我不知道您的情况,但您始终可以在创建视图时在视图中包含任意数量的列,并且可以添加任意数量的 where 条件以实现您的目标
    猜你喜欢
    • 2014-04-27
    • 2020-09-23
    • 2016-06-30
    • 2013-04-01
    • 2012-06-04
    • 2012-06-24
    • 2011-10-02
    • 1970-01-01
    • 2018-03-04
    相关资源
    最近更新 更多