【问题标题】:How does select * from table rand() work?select * from table rand() 如何工作?
【发布时间】:2011-04-24 03:19:03
【问题描述】:

我有一个简单的问题。

当我执行“Select * from table where rand()”时,我得到 rand # of rows。这是否与 select * from table limit rand() 相同(但它不起作用)?

【问题讨论】:

    标签: mysql random


    【解决方案1】:

    数据库查询中的where 子句只是一个语句,它会产生真或假值,因为表中的每一行都被考虑包含在结果集中。通常,T/F 计算涉及被查询表中的一个或多个字段,但这不是必需的。

    当您执行... WHERE rand() 时,您基本上会为每一行获得0 <= N < 1 范围内的随机值。 MySQL 通过将值四舍五入为 0 或 1 将其转换为布尔值。因此,随机数 0.5->0.999 变为 1 (TRUE),随机数 0 -> 0.49999 舍入为 0 (FALSE)。

    【讨论】:

    • 正是我想要的!谢谢!!
    【解决方案2】:

    Limit你的MySQL查询的结果要在一定数量范围内的结果。而Select * from table where rand()搜索整个表并随机选择一个

    【讨论】:

    【解决方案3】:

    当你使用

    ... LIMIT RAND()
    

    您需要考虑 RAND() 函数的作用 - 它返回一个介于 0.0 和 1.0 之间的值 - 因此它实际上是 LIMIT(0) - 您将始终得到零返回结果。

    http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_rand

    【讨论】:

      【解决方案4】:

      rand() 的计算结果总是介于 0 和 1 之间。

      如果在限制子句中使用它,它将不返回任何行,因为它的计算结果小于 1 行。

      如果您在 where 子句中使用它,它应该始终评估为真,因为它始终大于 1,并且将返回所有行,而不是随机行数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-09
        • 1970-01-01
        • 2014-12-12
        • 2011-04-06
        • 2016-09-02
        • 2014-12-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多